Index: top.c =================================================================== RCS file: /cvs/src/src/gdb/top.c,v retrieving revision 1.75 diff -u -r1.75 top.c --- top.c 16 Aug 2003 18:38:46 -0000 1.75 +++ top.c 4 Sep 2003 21:34:25 -0000 @@ -341,6 +341,9 @@ to that call via setjmp's return value. Note that REASON can't be zero, by definition in defs.h. */ + if (get_quit_confirmed ()) + exit ((int) reason); + (NORETURN void) SIGLONGJMP (*catch_return, (int) reason); } @@ -546,6 +549,21 @@ return catch_errors (do_captured_command, &args, "", mask); } +/* Flag to indicate if quit has been performed. */ +static int quit_confirmed; + +/* Verify if end-user has performed a quit operation. */ +int +get_quit_confirmed (void) +{ + return quit_confirmed; +} + +void +set_quit_confirmed (int val) +{ + quit_confirmed = val; +} /* Handler for SIGHUP. */ @@ -560,6 +578,7 @@ { caution = 0; /* Throw caution to the wind -- we're exiting. This prevents asking the user dumb questions. */ + set_quit_confirmed (1); quit_command ((char *) 0, 0); return 0; } @@ -771,6 +790,7 @@ (*window_hook) (instream, get_prompt ()); quit_flag = 0; + set_quit_confirmed (0); if (instream == stdin && stdin_is_tty) reinitialize_more_filter (); old_chain = make_cleanup (null_cleanup, 0); @@ -836,6 +856,7 @@ while (instream && !feof (instream)) { quit_flag = 0; + set_quit_confirmed (0); if (instream == stdin && stdin_is_tty) reinitialize_more_filter (); old_chain = make_cleanup (null_cleanup, 0); @@ -1422,6 +1443,8 @@ { char *s; + set_quit_confirmed (0); + /* This is something of a hack. But there's no reliable way to see if a GUI is running. The `use_windows' variable doesn't cut it. */ @@ -1436,6 +1459,7 @@ return 0; } + set_quit_confirmed (1); return 1; } Index: top.h =================================================================== RCS file: /cvs/src/src/gdb/top.h,v retrieving revision 1.9 diff -u -r1.9 top.h --- top.h 8 Jun 2003 18:27:14 -0000 1.9 +++ top.h 4 Sep 2003 21:34:25 -0000 @@ -42,6 +42,8 @@ void (*execute_command_func) (char *, int)); extern int quit_confirm (void); +extern int get_quit_confirmed (void); +extern void set_quit_confirmed (int); extern void quit_force (char *, int); extern void quit_command (char *, int); extern int quit_cover (void *);