aboutsummaryrefslogtreecommitdiff
path: root/gdb/maint.c
diff options
context:
space:
mode:
authorFernando Nasser <fnasser@redhat.com>2000-03-23 23:43:19 +0000
committerFernando Nasser <fnasser@redhat.com>2000-03-23 23:43:19 +0000
commit5638284566b17ba60eedca50f6e7bc13e7a3cc29 (patch)
treecdb0e845d64c986b45c29217bf9ba43206f02bbe /gdb/maint.c
parent4fb431855b5bf2e43f8bbac82a9e32c8b796a63f (diff)
downloadgdb-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.c126
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\