This is the mail archive of the gdb-patches@sourceware.org mailing list for the GDB project.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]
Other format: [Raw text]

[rfa] Use get_number_or_range for kill inferior etc.


With an additional testsuite test.

2011-02-25  Michael Snyder  <msnyder@vmware.com>
 
	* inferior.c (detach_inferior_command): Use get_number_or_range.
	(kill_inferior_command): Ditto.
	(remove_inferior_command): Ditto.
	(initialize_inferiors): Make command names plural.
	Update help strings.

2011-02-25  Michael Snyder  <msnyder@vmware.com>

	* gdb.multi/base.exp: Add test for remove-inferiors.

Index: inferior.c
===================================================================
RCS file: /cvs/src/src/gdb/inferior.c,v
retrieving revision 1.24
diff -u -p -u -p -r1.24 inferior.c
--- inferior.c	25 Feb 2011 19:19:25 -0000	1.24
+++ inferior.c	25 Feb 2011 20:15:42 -0000
@@ -626,20 +626,23 @@ detach_inferior_command (char *args, int
   if (!args || !*args)
     error (_("Requires argument (inferior id to detach)"));
 
-  num = parse_and_eval_long (args);
+  while (*args != '\0')
+    {
+      num = get_number_or_range (&args);
 
-  if (!valid_gdb_inferior_id (num))
-    error (_("Inferior ID %d not known."), num);
+      if (!valid_gdb_inferior_id (num))
+	error (_("Inferior ID %d not known."), num);
 
-  pid = gdb_inferior_id_to_pid (num);
+      pid = gdb_inferior_id_to_pid (num);
 
-  tp = any_thread_of_process (pid);
-  if (!tp)
-    error (_("Inferior has no threads."));
+      tp = any_thread_of_process (pid);
+      if (!tp)
+	error (_("Inferior has no threads."));
 
-  switch_to_thread (tp->ptid);
+      switch_to_thread (tp->ptid);
 
-  detach_command (NULL, from_tty);
+      detach_command (NULL, from_tty);
+    }
 }
 
 static void
@@ -651,20 +654,23 @@ kill_inferior_command (char *args, int f
   if (!args || !*args)
     error (_("Requires argument (inferior id to kill)"));
 
-  num = parse_and_eval_long (args);
+  while (*args != '\0')
+    {
+      num = get_number_or_range (&args);
 
-  if (!valid_gdb_inferior_id (num))
-    error (_("Inferior ID %d not known."), num);
+      if (!valid_gdb_inferior_id (num))
+	error (_("Inferior ID %d not known."), num);
 
-  pid = gdb_inferior_id_to_pid (num);
+      pid = gdb_inferior_id_to_pid (num);
 
-  tp = any_thread_of_process (pid);
-  if (!tp)
-    error (_("Inferior has no threads."));
+      tp = any_thread_of_process (pid);
+      if (!tp)
+	error (_("Inferior has no threads."));
 
-  switch_to_thread (tp->ptid);
+      switch_to_thread (tp->ptid);
 
-  target_kill ();
+      target_kill ();
+    }
 
   bfd_cache_close_all ();
 }
@@ -740,19 +746,25 @@ remove_inferior_command (char *args, int
   int num;
   struct inferior *inf;
 
-  num = parse_and_eval_long (args);
-  inf = find_inferior_id (num);
+  if (args == NULL || *args == '\0')
+    error (_("Requires an argument (inferior id to remove)"));
 
-  if (inf == NULL)
-    error (_("Inferior ID %d not known."), num);
+  while (*args != '\0')
+    {
+      num = get_number_or_range (&args);
+      inf = find_inferior_id (num);
+
+      if (inf == NULL)
+	error (_("Inferior ID %d not known."), num);
 
-  if (inf == current_inferior ())
-    error (_("Can not remove current symbol inferior."));
+      if (inf == current_inferior ())
+	error (_("Can not remove current symbol inferior."));
     
-  if (inf->pid != 0)
-    error (_("Can not remove an active inferior."));
+      if (inf->pid != 0)
+	error (_("Can not remove an active inferior."));
 
-  delete_inferior_1 (inf, 1);
+      delete_inferior_1 (inf, 1);
+    }
 }
 
 struct inferior *
@@ -1048,13 +1060,13 @@ initialize_inferiors (void)
   add_com ("add-inferior", no_class, add_inferior_command, _("\
 Add a new inferior.\n\
 Usage: add-inferior [-copies <N>] [-exec <FILENAME>]\n\
-N is the optional number of inferior to add, default is 1.\n\
+N is the optional number of inferiors to add, default is 1.\n\
 FILENAME is the file name of the executable to use\n\
 as main program."));
 
-  add_com ("remove-inferior", no_class, remove_inferior_command, _("\
-Remove inferior ID.\n\
-Usage: remove-inferior ID"));
+  add_com ("remove-inferiors", no_class, remove_inferior_command, _("\
+Remove inferior ID (or list of IDs).\n\
+Usage: remove-inferiors ID..."));
 
   add_com ("clone-inferior", no_class, clone_inferior_command, _("\
 Clone inferior ID.\n\
@@ -1064,12 +1076,12 @@ executable loaded as the copied inferior
 adds 1 copy.  If ID is not specified, it is the current inferior\n\
 that is cloned."));
 
-  add_cmd ("inferior", class_run, detach_inferior_command, _("\
-Detach from inferior ID."),
+  add_cmd ("inferiors", class_run, detach_inferior_command, _("\
+Detach from inferior ID (or list of IDS)."),
 	   &detachlist);
 
-  add_cmd ("inferior", class_run, kill_inferior_command, _("\
-Kill inferior ID."),
+  add_cmd ("inferiors", class_run, kill_inferior_command, _("\
+Kill inferior ID (or list of IDs)."),
 	   &killlist);
 
   add_cmd ("inferior", class_run, inferior_command, _("\
Index: testsuite/gdb.multi/base.exp
===================================================================
RCS file: /cvs/src/src/gdb/testsuite/gdb.multi/base.exp,v
retrieving revision 1.8
diff -u -p -u -p -r1.8 base.exp
--- testsuite/gdb.multi/base.exp	25 Feb 2011 19:19:26 -0000	1.8
+++ testsuite/gdb.multi/base.exp	25 Feb 2011 20:15:42 -0000
@@ -156,3 +156,34 @@ if { ![runto_main] } then {
 
 gdb_test "break hello" ".*"
 gdb_test "continue" "Breakpoint \[0-9\].*, hello.*"
+
+# Now let's remove the other two
+
+gdb_test_no_output "remove-inferior 2-3" "remove-inferior 2-3"
+
+set see1 0
+set see2 0
+set see3 0
+
+gdb_test_multiple "info inferiors" "check remove-inferiors" {
+    -re ". 3 \[^\r\n\]*${exec3}" {
+	set see3 1
+	exp_continue
+    }
+    -re ". 2 \[^\r\n\]*${exec2}" {
+	set see2 1
+	exp_continue
+    }
+    -re ". 1 \[^\r\n\]*${exec1}" {
+	set see1 1
+	exp_continue
+    }
+    -re "$gdb_prompt $" {
+	if { $see1 && !$see2 && !$see3 } then {
+	    pass "check remove-inferiors"
+	} else {
+	    fail "check remove-inferiors"
+	}
+    }
+}
+

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]