This is the mail archive of the gdb-patches@sources.redhat.com 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]

[commit] Add set_show_optional_filename_cmd


set_show_filename_cmd gives an error if there's no parameter, this one doesn't.

used and committed,
Andrew
2005-02-20  Andrew Cagney  <cagney@gnu.org>

	* cli/cli-decode.c (add_setshow_optional_filename_cmd): New
	function.
	* cli/cli-setshow.c (deprecated_show_value_hack) 
	(do_setshow_command): Handle var_optional_filename.
	* command.h (enum var_types): Add var_optional_filename.
	(add_setshow_optional_filename_cmd): Declare.
	* infcmd.c (notice_args_read): Use.

Index: command.h
===================================================================
RCS file: /cvs/src/src/gdb/command.h,v
retrieving revision 1.49
diff -p -u -r1.49 command.h
--- command.h	18 Feb 2005 20:57:15 -0000	1.49
+++ command.h	21 Feb 2005 03:24:21 -0000
@@ -80,8 +80,11 @@ typedef enum var_types
     /* String which stores what the user types verbatim.
        *VAR is a malloc'd string, or NULL if the string is empty.  */
     var_string_noescape,
-    /* String which stores a filename.
-       *VAR is a malloc'd string, or NULL if the string is empty.  */
+    /* String which stores a filename.  (*VAR) is a malloc'd string,
+       or "" if the string was empty.  */
+    var_optional_filename,
+    /* String which stores a filename.  (*VAR) is a malloc'd
+       string.  */
     var_filename,
     /* ZeroableInteger.  *VAR is an int.  Like Unsigned Integer except
        that zero really means zero.  */
@@ -301,6 +304,17 @@ extern void add_setshow_string_noescape_
 					     struct cmd_list_element **set_list,
 					     struct cmd_list_element **show_list);
 
+extern void add_setshow_optional_filename_cmd (char *name,
+					       enum command_class class,
+					       char **var,
+					       const char *set_doc,
+					       const char *show_doc,
+					       const char *help_doc,
+					       cmd_sfunc_ftype *set_func,
+					       show_value_ftype *show_func,
+					       struct cmd_list_element **set_list,
+					       struct cmd_list_element **show_list);
+
 extern void add_setshow_integer_cmd (char *name,
 				     enum command_class class,
 				     unsigned int *var,
Index: infcmd.c
===================================================================
RCS file: /cvs/src/src/gdb/infcmd.c,v
retrieving revision 1.133
diff -p -u -r1.133 infcmd.c
--- infcmd.c	15 Feb 2005 15:49:10 -0000	1.133
+++ infcmd.c	21 Feb 2005 03:24:23 -0000
@@ -250,8 +250,10 @@ notice_args_set (char *args, int from_tt
 
 /* Notice when `show args' is run.  */
 static void
-notice_args_read (char *args, int from_tty, struct cmd_list_element *c)
+notice_args_read (struct ui_file *file, int from_tty,
+		  struct cmd_list_element *c, const char *value)
 {
+  deprecated_show_value_hack (file, from_tty, c, value);
   /* Might compute the value.  */
   get_inferior_args ();
 }
@@ -1980,15 +1982,14 @@ _initialize_infcmd (void)
 	       _("Set terminal for future runs of program being debugged."));
   set_cmd_completer (c, filename_completer);
 
-  c = add_set_cmd ("args", class_run, var_string_noescape,
-		   (char *) &inferior_args,
-		   "Set argument list to give program being debugged when it is started.\n\
-Follow this command with any number of args, to be passed to the program.",
-		   &setlist);
-  set_cmd_completer (c, filename_completer);
-  set_cmd_sfunc (c, notice_args_set);
-  c = deprecated_add_show_from_set (c, &showlist);
-  set_cmd_sfunc (c, notice_args_read);
+  add_setshow_optional_filename_cmd ("args", class_run,
+				     &inferior_args, _("\
+Set argument list to give program being debugged when it is started."), _("\
+Show argument list to give program being debugged when it is started."), _("\
+Follow this command with any number of args, to be passed to the program."),
+				     notice_args_set,
+				     notice_args_read,
+				     &setlist, &showlist);
 
   c = add_cmd ("environment", no_class, environment_info, _("\
 The environment to give the program, or one variable's value.\n\
Index: cli/cli-decode.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-decode.c,v
retrieving revision 1.51
diff -p -u -r1.51 cli-decode.c
--- cli/cli-decode.c	18 Feb 2005 20:57:16 -0000	1.51
+++ cli/cli-decode.c	21 Feb 2005 03:24:23 -0000
@@ -536,6 +536,25 @@ add_setshow_string_noescape_cmd (char *n
 }
 
 /* Add element named NAME to both the set and show command LISTs (the
+   list for set/show or some sublist thereof).  */
+void
+add_setshow_optional_filename_cmd (char *name, enum command_class class,
+				   char **var,
+				   const char *set_doc, const char *show_doc,
+				   const char *help_doc,
+				   cmd_sfunc_ftype *set_func,
+				   show_value_ftype *show_func,
+				   struct cmd_list_element **set_list,
+				   struct cmd_list_element **show_list)
+{
+  add_setshow_cmd_full (name, class, var_optional_filename, var,
+			set_doc, show_doc, help_doc,
+			set_func, show_func,
+			set_list, show_list,
+			NULL, NULL);
+}
+
+/* Add element named NAME to both the set and show command LISTs (the
    list for set/show or some sublist thereof).  CLASS is as in
    add_cmd.  VAR is address of the variable which will contain the
    value.  SET_DOC and SHOW_DOC are the documentation strings.  */
Index: cli/cli-setshow.c
===================================================================
RCS file: /cvs/src/src/gdb/cli/cli-setshow.c,v
retrieving revision 1.21
diff -p -u -r1.21 cli-setshow.c
--- cli/cli-setshow.c	16 Feb 2005 17:20:59 -0000	1.21
+++ cli/cli-setshow.c	21 Feb 2005 03:24:23 -0000
@@ -102,6 +102,7 @@ deprecated_show_value_hack (struct ui_fi
     {
     case var_string:
     case var_string_noescape:
+    case var_optional_filename:
     case var_filename:
     case var_enum:
       printf_filtered ((" is \"%s\".\n"), value);
@@ -177,8 +178,14 @@ do_setshow_command (char *arg, int from_
 	  *(char **) c->var = savestring (arg, strlen (arg));
 	  break;
 	case var_filename:
+	case var_optional_filename:
 	  if (arg == NULL)
-	    error_no_arg (_("filename to set it to."));
+	    {
+	      if (c->var_type == var_optional_filename)
+		arg = "";
+	      else
+		error_no_arg (_("filename to set it to."));
+	    }
 	  if (*(char **) c->var != NULL)
 	    xfree (*(char **) c->var);
 	  *(char **) c->var = tilde_expand (arg);
@@ -298,6 +305,7 @@ do_setshow_command (char *arg, int from_
 	  }
 	  break;
 	case var_string_noescape:
+	case var_optional_filename:
 	case var_filename:
 	case var_enum:
 	  if (*(char **) c->var)

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