diff options
author | Fernando Nasser <fnasser@redhat.com> | 2000-03-23 23:43:19 +0000 |
---|---|---|
committer | Fernando Nasser <fnasser@redhat.com> | 2000-03-23 23:43:19 +0000 |
commit | 5638284566b17ba60eedca50f6e7bc13e7a3cc29 (patch) | |
tree | cdb0e845d64c986b45c29217bf9ba43206f02bbe /gdb/maint.c | |
parent | 4fb431855b5bf2e43f8bbac82a9e32c8b796a63f (diff) | |
download | gdb-5638284566b17ba60eedca50f6e7bc13e7a3cc29.zip gdb-5638284566b17ba60eedca50f6e7bc13e7a3cc29.tar.gz gdb-5638284566b17ba60eedca50f6e7bc13e7a3cc29.tar.bz2 |
2000-03-23 Fernando Nasser <fnasser@cygnus.com>
From David Whedon <dwhedon@gordian.com>
* top.c (execute_command): Checks all commands beore executing
to see if the user needs to be warned that the command is
deprecated, warns user if appropriate.
(add_info), (add_info_alias), (add_com) , (add_com_alias): Changed
return values from void to struct cmd_list_element *.
* command.c (lookup_cmd_1): Check aliases before following link
in case user needs to be warned about a deprecated alias.
(deprecate_cmd): new exported function for command deprecation,
sets flags and posibly a replacement string.
(deprecated_cmd_warning): New exported funciton to warn user about
a deprecated command.
(lookup_cmd_composition): New exported function that determines
alias, prefix_command, and cmd based on a string. This is useful
is we want to full name of a command.
* command.h : Added prototypes for deprecate_cmd,
deprecated_warn_user and lookup_cmd_composition, added flags to
the cmd_list_element structure, changed return values for
add_com_* and add_info_* from void to cmd_list_element.
* maint.c : (maintenance_deprecate): New function to deprecate a
command. This exists only so that the testsuite can deprecate
commands at runtime and check the warning behavior.
(maintenance_undeprecate) : New function, drops deprecated flags.
(maintenance_do_deprecate): Actually does the (un)deprecation.
(initialize_maint_cmds): Added the above new deprecate commands.
Diffstat (limited to 'gdb/maint.c')
-rw-r--r-- | gdb/maint.c | 126 |
1 files changed, 126 insertions, 0 deletions
diff --git a/gdb/maint.c b/gdb/maint.c index 725c6c5..e443522 100644 --- a/gdb/maint.c +++ b/gdb/maint.c @@ -358,6 +358,119 @@ maintenance_translate_address (arg, from_tty) return; } + +/* When a comamnd is deprecated the user will be warned the first time + the command is used. If possible, a replacement will be offered. */ + +static void +maintenance_deprecate (char *args, int from_tty) +{ + if (args == NULL || *args == '\0') + { + printf_unfiltered ("\"maintenance deprecate\" takes an argument, \n\ +the command you want to deprecate, and optionally the replacement command \n\ +enclosed in quotes.\n"); + } + + maintenance_do_deprecate (args, 1); + +} + + +static void +maintenance_undeprecate (char *args, int from_tty) +{ + if (args == NULL || *args == '\0') + { + printf_unfiltered ("\"maintenance undeprecate\" takes an argument, \n\ +the command you want to undeprecate.\n"); + } + + maintenance_do_deprecate (args, 0); + +} + +/* + You really shouldn't be using this. It is just for the testsuite. + Rather, you should use deprecate_cmd() when the command is created + in _initialize_blah(). + + This function deprecates a command and optionally assigns it a + replacement. +*/ + +static void maintenance_do_deprecate(char *text, int deprecate){ + + struct cmd_list_element *alias=NULL; + struct cmd_list_element *prefix_cmd=NULL; + struct cmd_list_element *cmd=NULL; + + char *start_ptr=NULL; + char *end_ptr=NULL; + int len; + char *replacement=NULL; + + + if (!lookup_cmd_composition (text, &alias, &prefix_cmd, &cmd)){ + printf_filtered ("Can't find command '%s' to deprecate.\n", text); + return; + } + + if (deprecate) + { + /* look for a replacement command */ + if (start_ptr = strchr (text, '\"')) + { + start_ptr++; + if(end_ptr = strrchr (start_ptr, '\"')) + { + len = end_ptr-start_ptr; + start_ptr[len]='\0'; + replacement = xstrdup (start_ptr); + } + } + } + + if (!start_ptr || !end_ptr) + replacement = NULL; + + + /* If they used an alias, we only want to deprecate the alias. + + Note the MALLOCED_REPLACEMENT test. If the command's replacement + string was allocated at compile time we don't want to free the + memory. + */ + if (alias) + { + + if (alias->flags & MALLOCED_REPLACEMENT) + free (alias->replacement); + + if (deprecate) + alias->flags |= (DEPRECATED_WARN_USER | CMD_DEPRECATED); + else + alias->flags &= ~(DEPRECATED_WARN_USER | CMD_DEPRECATED); + alias->replacement=replacement; + alias->flags |= MALLOCED_REPLACEMENT; + return; + } + else if (cmd) + { + if (cmd->flags & MALLOCED_REPLACEMENT) + free (cmd->replacement); + + if (deprecate) + cmd->flags |= (DEPRECATED_WARN_USER | CMD_DEPRECATED); + else + cmd->flags &= ~(DEPRECATED_WARN_USER | CMD_DEPRECATED); + cmd->replacement=replacement; + cmd->flags |= MALLOCED_REPLACEMENT; + return; + } +} + + void _initialize_maint_cmds () { @@ -456,6 +569,19 @@ If a SOURCE file is specified, dump only that file's partial symbols.", "Translate a section name and address to a symbol.", &maintenancelist); + add_cmd ("deprecate", class_maintenance, maintenance_deprecate, + "Deprecate a command. Note that this is just in here so the \n\ +testsuite can check the comamnd deprecator. You probably shouldn't use this,\n\ +rather you should use the C function deprecate_cmd(). If you decide you \n\ +want to use it: maintenance deprecate 'commandname' \"replacement\". The \n\ +replacement is optional.", &maintenancelist); + + add_cmd ("undeprecate", class_maintenance, maintenance_undeprecate, + "Undeprecate a command. Note that this is just in here so the \n\ +testsuite can check the comamnd deprecator. You probably shouldn't use this,\n\ +If you decide you want to use it: maintenance undeprecate 'commandname'", + &maintenancelist); + add_show_from_set ( add_set_cmd ("watchdog", class_maintenance, var_zinteger, (char *) &watchdog, "Set watchdog timer.\n\ |