2003-09-12 Jeff Johnston <jjohnstn@redhat.com>
authorJeff Johnston <jjohnstn@redhat.com>
Fri, 12 Sep 2003 15:24:24 +0000 (15:24 +0000)
committerJeff Johnston <jjohnstn@redhat.com>
Fri, 12 Sep 2003 15:24:24 +0000 (15:24 +0000)
        * top.c (quit_target): New static helper function.
        (quit_force): Moved code to quit_target().  Call quit_target()
        via catch_errors() to catch errors during quit.

gdb/ChangeLog
gdb/top.c

index ae994cab5852025a671c53111a7a1b02871f0dbb..c999b83cccea372835ce8b503294240e72281791 100644 (file)
@@ -1,3 +1,9 @@
+2003-09-12  Jeff Johnston  <jjohnstn@redhat.com>
+
+       * top.c (quit_target): New static helper function.
+       (quit_force): Moved code to quit_target().  Call quit_target()
+       via catch_errors() to catch errors during quit.
+
 2003-09-11  David Carlton  <carlton@kealia.com>
 
        * buildsym.c (finish_block): Use allocate_block to allocate the
index 7ac5dd8f6923ba64ced6f47f77af20d14473da2b..05fb3d4568c7d67bd4306d0418d57e019a3e49da 100644 (file)
--- a/gdb/top.c
+++ b/gdb/top.c
@@ -1439,28 +1439,25 @@ quit_confirm (void)
   return 1;
 }
 
-/* Quit without asking for confirmation.  */
+/* Helper routine for quit_force that requires error handling.  */
 
-void
-quit_force (char *args, int from_tty)
+struct qt_args
 {
-  int exit_code = 0;
-
-  /* An optional expression may be used to cause gdb to terminate with the 
-     value of that expression. */
-  if (args)
-    {
-      struct value *val = parse_and_eval (args);
+  char *args;
+  int from_tty;
+};
 
-      exit_code = (int) value_as_long (val);
-    }
+static int
+quit_target (void *arg)
+{
+  struct qt_args *qt = (struct qt_args *)arg;
 
   if (! ptid_equal (inferior_ptid, null_ptid) && target_has_execution)
     {
       if (attach_flag)
-       target_detach (args, from_tty);
+        target_detach (qt->args, qt->from_tty);
       else
-       target_kill ();
+        target_kill ();
     }
 
   /* UDI wants this, to kill the TIP.  */
@@ -1472,6 +1469,29 @@ quit_force (char *args, int from_tty)
 
   do_final_cleanups (ALL_CLEANUPS);    /* Do any final cleanups before exiting */
 
+  return 0;
+}
+
+/* Quit without asking for confirmation.  */
+
+void
+quit_force (char *args, int from_tty)
+{
+  int exit_code = 0;
+
+  /* An optional expression may be used to cause gdb to terminate with the 
+     value of that expression. */
+  if (args)
+    {
+      struct value *val = parse_and_eval (args);
+
+      exit_code = (int) value_as_long (val);
+    }
+
+  /* We want to handle any quit errors and exit regardless.  */
+  catch_errors (quit_target, args,
+               "Quitting: ", RETURN_MASK_ALL);
+
   exit (exit_code);
 }