X-Git-Url: http://git.efficios.com/?a=blobdiff_plain;f=gdb%2Fcli%2Fcli-decode.c;h=50430953c72fe7af326cdbebebe1aa5012ea2c78;hb=94aeb44b001ab2d632806242a3bacb0a879abe15;hp=0afe36aa4e15125d6bdca2953d09f8322c3935ff;hpb=e2882c85786571175a0b0bfc3bcd2f14620b1ea3;p=deliverable%2Fbinutils-gdb.git diff --git a/gdb/cli/cli-decode.c b/gdb/cli/cli-decode.c index 0afe36aa4e..50430953c7 100644 --- a/gdb/cli/cli-decode.c +++ b/gdb/cli/cli-decode.c @@ -1,6 +1,6 @@ /* Handle lists of commands, their decoding and documentation, for GDB. - Copyright (C) 1986-2018 Free Software Foundation, Inc. + Copyright (C) 1986-2019 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -193,7 +193,8 @@ static struct cmd_list_element * do_add_cmd (const char *name, enum command_class theclass, const char *doc, struct cmd_list_element **list) { - struct cmd_list_element *c = XNEW (struct cmd_list_element); + struct cmd_list_element *c = new struct cmd_list_element (name, theclass, + doc); struct cmd_list_element *p, *iter; /* Turn each alias of the old command into an alias of the new @@ -227,34 +228,6 @@ do_add_cmd (const char *name, enum command_class theclass, p->next = c; } - c->name = name; - c->theclass = theclass; - set_cmd_context (c, NULL); - c->doc = doc; - c->cmd_deprecated = 0; - c->deprecated_warn_user = 0; - c->malloced_replacement = 0; - c->doc_allocated = 0; - c->replacement = NULL; - c->pre_show_hook = NULL; - c->hook_in = 0; - c->prefixlist = NULL; - c->prefixname = NULL; - c->allow_unknown = 0; - c->prefix = NULL; - c->abbrev_flag = 0; - set_cmd_completer (c, symbol_completer); - c->completer_handle_brkchars = NULL; - c->destroyer = NULL; - c->type = not_set_cmd; - c->var = NULL; - c->var_type = var_boolean; - c->enums = NULL; - c->user_commands = NULL; - c->cmd_pointer = NULL; - c->alias_chain = NULL; - c->suppress_notification = NULL; - return c; } @@ -278,6 +251,23 @@ add_cmd (const char *name, enum command_class theclass, return result; } +/* Add an element with a suppress notification to the LIST of commands. */ + +struct cmd_list_element * +add_cmd_suppress_notification (const char *name, enum command_class theclass, + cmd_const_cfunc_ftype *fun, const char *doc, + struct cmd_list_element **list, + int *suppress_notification) +{ + struct cmd_list_element *element; + + element = add_cmd (name, theclass, fun, doc, list); + element->suppress_notification = suppress_notification; + + return element; +} + + /* Deprecates a command CMD. REPLACEMENT is the name of the command which should be used in place of this command, or NULL if no such command exists. @@ -389,6 +379,25 @@ add_prefix_cmd (const char *name, enum command_class theclass, return c; } +/* Like ADD_PREFIX_CMD but sets the suppress_notification pointer on the + new command list element. */ + +struct cmd_list_element * +add_prefix_cmd_suppress_notification + (const char *name, enum command_class theclass, + cmd_const_cfunc_ftype *fun, + const char *doc, struct cmd_list_element **prefixlist, + const char *prefixname, int allow_unknown, + struct cmd_list_element **list, + int *suppress_notification) +{ + struct cmd_list_element *element + = add_prefix_cmd (name, theclass, fun, doc, prefixlist, + prefixname, allow_unknown, list); + element->suppress_notification = suppress_notification; + return element; +} + /* Like add_prefix_cmd but sets the abbrev_flag on the new command. */ struct cmd_list_element * @@ -522,16 +531,20 @@ add_setshow_enum_cmd (const char *name, cmd_const_sfunc_ftype *set_func, show_value_ftype *show_func, struct cmd_list_element **set_list, - struct cmd_list_element **show_list) + struct cmd_list_element **show_list, + void *context) { - struct cmd_list_element *c; + struct cmd_list_element *c, *show; add_setshow_cmd_full (name, theclass, var_enum, var, set_doc, show_doc, help_doc, set_func, show_func, set_list, show_list, - &c, NULL); + &c, &show); c->enums = enumlist; + + set_cmd_context (c, context); + set_cmd_context (show, context); } const char * const auto_boolean_enums[] = { "on", "off", "auto", NULL }; @@ -841,8 +854,6 @@ delete_cmd (const char *name, struct cmd_list_element **list, *prehookee = iter->hookee_pre; if (iter->hookee_post) iter->hookee_post->hook_post = 0; - if (iter->doc && iter->doc_allocated) - xfree ((char *) iter->doc); *posthook = iter->hook_post; *posthookee = iter->hookee_post; @@ -866,7 +877,7 @@ delete_cmd (const char *name, struct cmd_list_element **list, *prevp = iter->alias_chain; } - xfree (iter); + delete iter; /* We won't see another command with the same name. */ break; @@ -922,12 +933,8 @@ add_com_suppress_notification (const char *name, enum command_class theclass, cmd_const_cfunc_ftype *fun, const char *doc, int *suppress_notification) { - struct cmd_list_element *element; - - element = add_cmd (name, theclass, fun, doc, &cmdlist); - element->suppress_notification = suppress_notification; - - return element; + return add_cmd_suppress_notification (name, theclass, fun, doc, + &cmdlist, suppress_notification); } /* Recursively walk the commandlist structures, and print out the @@ -1590,7 +1597,6 @@ lookup_cmd (const char **line, struct cmd_list_element *list, } error (_("Ambiguous %scommand \"%s\": %s."), local_cmdtype, *line, ambbuf); - return 0; /* lint */ } } else