From b4b4ac0b71ae756aa805f15a6f9b0c5b79d8f398 Mon Sep 17 00:00:00 2001 From: Andrew Cagney Date: Mon, 21 Feb 2005 03:25:56 +0000 Subject: [PATCH] 2005-02-20 Andrew Cagney * 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. --- gdb/ChangeLog | 8 ++++++++ gdb/cli/cli-decode.c | 19 +++++++++++++++++++ gdb/cli/cli-setshow.c | 10 +++++++++- gdb/command.h | 18 ++++++++++++++++-- gdb/infcmd.c | 21 +++++++++++---------- 5 files changed, 63 insertions(+), 13 deletions(-) diff --git a/gdb/ChangeLog b/gdb/ChangeLog index c2eccfea3be..4ec29aeffde 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,13 @@ 2005-02-20 Andrew Cagney + * 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. + * symfile-mem.c (symbol_file_add_from_memory): Pass target_read_memory to bfd_elf_bfd_from_remote_memory. (do_target_read_memory): Delete. diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index ec2f734cac1..f2a533ce4c4 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -535,6 +535,25 @@ add_setshow_string_noescape_cmd (char *name, enum command_class class, NULL, NULL); } +/* 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 diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index 993ca5cdcd4..15c664d0134 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -102,6 +102,7 @@ deprecated_show_value_hack (struct ui_file *ignore_file, { 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_tty, struct cmd_list_element *c) *(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_tty, struct cmd_list_element *c) } break; case var_string_noescape: + case var_optional_filename: case var_filename: case var_enum: if (*(char **) c->var) diff --git a/gdb/command.h b/gdb/command.h index dcebe49be8a..cace34f6120 100644 --- a/gdb/command.h +++ b/gdb/command.h @@ -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_cmd (char *name, 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, diff --git a/gdb/infcmd.c b/gdb/infcmd.c index 807db8054cd..f04dc8a3d8a 100644 --- a/gdb/infcmd.c +++ b/gdb/infcmd.c @@ -250,8 +250,10 @@ notice_args_set (char *args, int from_tty, struct cmd_list_element *c) /* 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\ -- 2.30.2