forked from Imagelibrary/binutils-gdb
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.
This commit is contained in:
126
gdb/maint.c
126
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\
|
||||
|
||||
Reference in New Issue
Block a user