Introduce and use make_unique_xstrdup
Adds an utility function to make it shorter to write the common case of wrapping an xstrdup with a unique_xmalloc_ptr, and uses it throughout. Note: I tried to put this in common/common-utils.h near skip_spaces, etc. but that is included in common/common-defs.h before common/gdb_unique_ptr.h is included, so it would fail to compile because gdb::unique_xmalloc_ptr isn't defined at that point yet. I tried moving the gdb_unique_ptr.h inclusion before common-utils.h, but that doesn't work because gdb_unique_ptr.h depends on common-utils.h for xfree. gdb/ChangeLog: 2019-06-04 Pedro Alves <palves@redhat.com> * common/gdb_unique_ptr.h (make_unique_xstrdup): New. * ada-lang.c (catch_ada_completer): Use make_unique_xstrdup. * breakpoint.c (condition_completer): Likewise. * cli/cli-dump.c (scan_expression): Likewise. * common/filestuff.c (mkdir_recursive): Likewise. * common/gdb_tilde_expand.c (gdb_tilde_expand_up) * common/pathstuff.c (gdb_realpath, gdb_realpath_keepfile) (gdb_abspath): Likewise. * compile/compile-cplus-types.c (compile_cplus_instance::decl_name): Likewise. * completer.c (complete_explicit_location): (signal_completer, reg_or_group_completer_1): Likewise. * cp-support.c (cp_remove_params_if_any): Likewise. * fbsd-tdep.c (fbsd_core_vnode_path): Likewise. * guile/scm-safe-call.c (gdbscm_safe_eval_string): Likewise. * infcmd.c (strip_bg_char): Likewise. * linespec.c (copy_token_string): Likewise. * mi/mi-main.c (output_cores): Likewise. * psymtab.c (psymtab_search_name): * symfile.c (test_set_ext_lang_command): Likewise. * target.c (target_fileio_read_stralloc): Likewise. * tui/tui-regs.c (tui_reggroup_completer): Likewise. * value.c (complete_internalvar): Likewise. gdb/gdbserver/ChangeLog: 2019-06-04 Pedro Alves <palves@redhat.com> * server.c (captured_main): Use make_unique_xstrdup.
This commit is contained in:
parent
d3238f7d90
commit
b02f78f928
23 changed files with 65 additions and 45 deletions
|
@ -1,3 +1,30 @@
|
||||||
|
2019-06-04 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* common/gdb_unique_ptr.h (make_unique_xstrdup): New.
|
||||||
|
|
||||||
|
* ada-lang.c (catch_ada_completer): Use make_unique_xstrdup.
|
||||||
|
* breakpoint.c (condition_completer): Likewise.
|
||||||
|
* cli/cli-dump.c (scan_expression): Likewise.
|
||||||
|
* common/filestuff.c (mkdir_recursive): Likewise.
|
||||||
|
* common/gdb_tilde_expand.c (gdb_tilde_expand_up)
|
||||||
|
* common/pathstuff.c (gdb_realpath, gdb_realpath_keepfile)
|
||||||
|
(gdb_abspath): Likewise.
|
||||||
|
* compile/compile-cplus-types.c
|
||||||
|
(compile_cplus_instance::decl_name): Likewise.
|
||||||
|
* completer.c (complete_explicit_location):
|
||||||
|
(signal_completer, reg_or_group_completer_1): Likewise.
|
||||||
|
* cp-support.c (cp_remove_params_if_any): Likewise.
|
||||||
|
* fbsd-tdep.c (fbsd_core_vnode_path): Likewise.
|
||||||
|
* guile/scm-safe-call.c (gdbscm_safe_eval_string): Likewise.
|
||||||
|
* infcmd.c (strip_bg_char): Likewise.
|
||||||
|
* linespec.c (copy_token_string): Likewise.
|
||||||
|
* mi/mi-main.c (output_cores): Likewise.
|
||||||
|
* psymtab.c (psymtab_search_name):
|
||||||
|
* symfile.c (test_set_ext_lang_command): Likewise.
|
||||||
|
* target.c (target_fileio_read_stralloc): Likewise.
|
||||||
|
* tui/tui-regs.c (tui_reggroup_completer): Likewise.
|
||||||
|
* value.c (complete_internalvar): Likewise.
|
||||||
|
|
||||||
2019-06-04 Christian Biesinger <cbiesinger@google.com>
|
2019-06-04 Christian Biesinger <cbiesinger@google.com>
|
||||||
|
|
||||||
Add objfile property to gdb.Type.
|
Add objfile property to gdb.Type.
|
||||||
|
|
|
@ -13195,8 +13195,7 @@ catch_ada_completer (struct cmd_list_element *cmd, completion_tracker &tracker,
|
||||||
for (const ada_exc_info &info : exceptions)
|
for (const ada_exc_info &info : exceptions)
|
||||||
{
|
{
|
||||||
if (startswith (info.name, word))
|
if (startswith (info.name, word))
|
||||||
tracker.add_completion
|
tracker.add_completion (make_unique_xstrdup (info.name));
|
||||||
(gdb::unique_xmalloc_ptr<char> (xstrdup (info.name)));
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -941,10 +941,7 @@ condition_completer (struct cmd_list_element *cmd,
|
||||||
xsnprintf (number, sizeof (number), "%d", b->number);
|
xsnprintf (number, sizeof (number), "%d", b->number);
|
||||||
|
|
||||||
if (strncmp (number, text, len) == 0)
|
if (strncmp (number, text, len) == 0)
|
||||||
{
|
tracker.add_completion (make_unique_xstrdup (number));
|
||||||
gdb::unique_xmalloc_ptr<char> copy (xstrdup (number));
|
|
||||||
tracker.add_completion (std::move (copy));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
|
|
|
@ -37,7 +37,7 @@ static gdb::unique_xmalloc_ptr<char>
|
||||||
scan_expression (const char **cmd, const char *def)
|
scan_expression (const char **cmd, const char *def)
|
||||||
{
|
{
|
||||||
if ((*cmd) == NULL || (**cmd) == '\0')
|
if ((*cmd) == NULL || (**cmd) == '\0')
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (def));
|
return make_unique_xstrdup (def);
|
||||||
else
|
else
|
||||||
{
|
{
|
||||||
char *exp;
|
char *exp;
|
||||||
|
|
|
@ -462,7 +462,7 @@ is_regular_file (const char *name, int *errno_ptr)
|
||||||
bool
|
bool
|
||||||
mkdir_recursive (const char *dir)
|
mkdir_recursive (const char *dir)
|
||||||
{
|
{
|
||||||
gdb::unique_xmalloc_ptr<char> holder (xstrdup (dir));
|
auto holder = make_unique_xstrdup (dir);
|
||||||
char * const start = holder.get ();
|
char * const start = holder.get ();
|
||||||
char *component_start = start;
|
char *component_start = start;
|
||||||
char *component_end = start;
|
char *component_end = start;
|
||||||
|
|
|
@ -91,5 +91,5 @@ gdb_tilde_expand_up (const char *dir)
|
||||||
gdb_assert (glob.pathc () > 0);
|
gdb_assert (glob.pathc () > 0);
|
||||||
/* "glob" may return more than one match to the path provided by the
|
/* "glob" may return more than one match to the path provided by the
|
||||||
user, but we are only interested in the first match. */
|
user, but we are only interested in the first match. */
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (glob.pathv ()[0]));
|
return make_unique_xstrdup (glob.pathv ()[0]);
|
||||||
}
|
}
|
||||||
|
|
|
@ -56,4 +56,12 @@ struct noop_deleter
|
||||||
|
|
||||||
} /* namespace gdb */
|
} /* namespace gdb */
|
||||||
|
|
||||||
|
/* Dup STR and return a unique_xmalloc_ptr for the result. */
|
||||||
|
|
||||||
|
static inline gdb::unique_xmalloc_ptr<char>
|
||||||
|
make_unique_xstrdup (const char *str)
|
||||||
|
{
|
||||||
|
return gdb::unique_xmalloc_ptr<char> (xstrdup (str));
|
||||||
|
}
|
||||||
|
|
||||||
#endif /* COMMON_GDB_UNIQUE_PTR_H */
|
#endif /* COMMON_GDB_UNIQUE_PTR_H */
|
||||||
|
|
|
@ -65,7 +65,7 @@ gdb_realpath (const char *filename)
|
||||||
we might not be able to display the original casing in a given
|
we might not be able to display the original casing in a given
|
||||||
path. */
|
path. */
|
||||||
if (len > 0 && len < MAX_PATH)
|
if (len > 0 && len < MAX_PATH)
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (buf));
|
return make_unique_xstrdup (buf);
|
||||||
}
|
}
|
||||||
#else
|
#else
|
||||||
{
|
{
|
||||||
|
@ -77,7 +77,7 @@ gdb_realpath (const char *filename)
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
/* This system is a lost cause, just dup the buffer. */
|
/* This system is a lost cause, just dup the buffer. */
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (filename));
|
return make_unique_xstrdup (filename);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* See common/pathstuff.h. */
|
/* See common/pathstuff.h. */
|
||||||
|
@ -92,7 +92,7 @@ gdb_realpath_keepfile (const char *filename)
|
||||||
/* Extract the basename of filename, and return immediately
|
/* Extract the basename of filename, and return immediately
|
||||||
a copy of filename if it does not contain any directory prefix. */
|
a copy of filename if it does not contain any directory prefix. */
|
||||||
if (base_name == filename)
|
if (base_name == filename)
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (filename));
|
return make_unique_xstrdup (filename);
|
||||||
|
|
||||||
dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
|
dir_name = (char *) alloca ((size_t) (base_name - filename + 2));
|
||||||
/* Allocate enough space to store the dir_name + plus one extra
|
/* Allocate enough space to store the dir_name + plus one extra
|
||||||
|
@ -135,7 +135,7 @@ gdb_abspath (const char *path)
|
||||||
return gdb_tilde_expand_up (path);
|
return gdb_tilde_expand_up (path);
|
||||||
|
|
||||||
if (IS_ABSOLUTE_PATH (path))
|
if (IS_ABSOLUTE_PATH (path))
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (path));
|
return make_unique_xstrdup (path);
|
||||||
|
|
||||||
/* Beware the // my son, the Emacs barfs, the botch that catch... */
|
/* Beware the // my son, the Emacs barfs, the botch that catch... */
|
||||||
return gdb::unique_xmalloc_ptr<char>
|
return gdb::unique_xmalloc_ptr<char>
|
||||||
|
|
|
@ -65,7 +65,7 @@ compile_cplus_instance::decl_name (const char *natural)
|
||||||
if (name != nullptr)
|
if (name != nullptr)
|
||||||
return name;
|
return name;
|
||||||
|
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (natural));
|
return make_unique_xstrdup (natural);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Get the access flag for the NUM'th field of TYPE. */
|
/* Get the access flag for the NUM'th field of TYPE. */
|
||||||
|
|
|
@ -798,9 +798,7 @@ complete_explicit_location (completion_tracker &tracker,
|
||||||
before: "b -function 'not_loaded_function_yet()'"
|
before: "b -function 'not_loaded_function_yet()'"
|
||||||
after: "b -function 'not_loaded_function_yet()' "
|
after: "b -function 'not_loaded_function_yet()' "
|
||||||
*/
|
*/
|
||||||
gdb::unique_xmalloc_ptr<char> text_copy
|
tracker.add_completion (make_unique_xstrdup (text));
|
||||||
(xstrdup (text));
|
|
||||||
tracker.add_completion (std::move (text_copy));
|
|
||||||
}
|
}
|
||||||
else if (quoted_arg_end[1] == ' ')
|
else if (quoted_arg_end[1] == ' ')
|
||||||
{
|
{
|
||||||
|
@ -1723,10 +1721,7 @@ signal_completer (struct cmd_list_element *ignore,
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (strncasecmp (signame, word, len) == 0)
|
if (strncasecmp (signame, word, len) == 0)
|
||||||
{
|
tracker.add_completion (make_unique_xstrdup (signame));
|
||||||
gdb::unique_xmalloc_ptr<char> copy (xstrdup (signame));
|
|
||||||
tracker.add_completion (std::move (copy));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1765,10 +1760,7 @@ reg_or_group_completer_1 (completion_tracker &tracker,
|
||||||
i++)
|
i++)
|
||||||
{
|
{
|
||||||
if (*name != '\0' && strncmp (word, name, len) == 0)
|
if (*name != '\0' && strncmp (word, name, len) == 0)
|
||||||
{
|
tracker.add_completion (make_unique_xstrdup (name));
|
||||||
gdb::unique_xmalloc_ptr<char> copy (xstrdup (name));
|
|
||||||
tracker.add_completion (std::move (copy));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -1782,10 +1774,7 @@ reg_or_group_completer_1 (completion_tracker &tracker,
|
||||||
{
|
{
|
||||||
name = reggroup_name (group);
|
name = reggroup_name (group);
|
||||||
if (strncmp (word, name, len) == 0)
|
if (strncmp (word, name, len) == 0)
|
||||||
{
|
tracker.add_completion (make_unique_xstrdup (name));
|
||||||
gdb::unique_xmalloc_ptr<char> copy (xstrdup (name));
|
|
||||||
tracker.add_completion (std::move (copy));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
|
@ -908,7 +908,7 @@ cp_remove_params_if_any (const char *demangled_name, bool completion_mode)
|
||||||
we're completing / matching everything, avoid returning NULL
|
we're completing / matching everything, avoid returning NULL
|
||||||
which would make callers interpret the result as an error. */
|
which would make callers interpret the result as an error. */
|
||||||
if (demangled_name[0] == '\0' && completion_mode)
|
if (demangled_name[0] == '\0' && completion_mode)
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (""));
|
return make_unique_xstrdup ("");
|
||||||
|
|
||||||
gdb::unique_xmalloc_ptr<char> without_params
|
gdb::unique_xmalloc_ptr<char> without_params
|
||||||
= cp_remove_params_1 (demangled_name, false);
|
= cp_remove_params_1 (demangled_name, false);
|
||||||
|
|
|
@ -1266,7 +1266,7 @@ fbsd_core_vnode_path (struct gdbarch *gdbarch, int fd)
|
||||||
&& bfd_get_signed_32 (core_bfd, descdata + KF_FD) == fd)
|
&& bfd_get_signed_32 (core_bfd, descdata + KF_FD) == fd)
|
||||||
{
|
{
|
||||||
char *path = (char *) descdata + KF_PATH;
|
char *path = (char *) descdata + KF_PATH;
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (path));
|
return make_unique_xstrdup (path);
|
||||||
}
|
}
|
||||||
|
|
||||||
descdata += structsize;
|
descdata += structsize;
|
||||||
|
|
|
@ -1,3 +1,7 @@
|
||||||
|
2019-06-04 Pedro Alves <palves@redhat.com>
|
||||||
|
|
||||||
|
* server.c (captured_main): Use make_unique_xstrdup.
|
||||||
|
|
||||||
2019-06-02 Tom Tromey <tom@tromey.com>
|
2019-06-02 Tom Tromey <tom@tromey.com>
|
||||||
|
|
||||||
* gdbreplay.c (fromhex): Remove.
|
* gdbreplay.c (fromhex): Remove.
|
||||||
|
|
|
@ -3802,7 +3802,7 @@ captured_main (int argc, char *argv[])
|
||||||
int i, n;
|
int i, n;
|
||||||
|
|
||||||
n = argc - (next_arg - argv);
|
n = argc - (next_arg - argv);
|
||||||
program_path.set (gdb::unique_xmalloc_ptr<char> (xstrdup (next_arg[0])));
|
program_path.set (make_unique_xstrdup (next_arg[0]));
|
||||||
for (i = 1; i < n; i++)
|
for (i = 1; i < n; i++)
|
||||||
program_args.push_back (xstrdup (next_arg[i]));
|
program_args.push_back (xstrdup (next_arg[i]));
|
||||||
program_args.push_back (NULL);
|
program_args.push_back (NULL);
|
||||||
|
|
|
@ -404,7 +404,7 @@ gdbscm_safe_eval_string (const char *string, int display_result)
|
||||||
result = gdbscm_with_guile (scscm_eval_scheme_string, (void *) &data);
|
result = gdbscm_with_guile (scscm_eval_scheme_string, (void *) &data);
|
||||||
|
|
||||||
if (result != NULL)
|
if (result != NULL)
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (result));
|
return make_unique_xstrdup (result);
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -421,7 +421,7 @@ strip_bg_char (const char *args, int *bg_char_p)
|
||||||
}
|
}
|
||||||
|
|
||||||
*bg_char_p = 0;
|
*bg_char_p = 0;
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (args));
|
return make_unique_xstrdup (args);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Common actions to take after creating any sort of inferior, by any
|
/* Common actions to take after creating any sort of inferior, by any
|
||||||
|
|
|
@ -555,7 +555,7 @@ copy_token_string (linespec_token token)
|
||||||
const char *str, *s;
|
const char *str, *s;
|
||||||
|
|
||||||
if (token.type == LSTOKEN_KEYWORD)
|
if (token.type == LSTOKEN_KEYWORD)
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (LS_TOKEN_KEYWORD (token)));
|
return make_unique_xstrdup (LS_TOKEN_KEYWORD (token));
|
||||||
|
|
||||||
str = LS_TOKEN_STOKEN (token).ptr;
|
str = LS_TOKEN_STOKEN (token).ptr;
|
||||||
s = remove_trailing_whitespace (str, str + LS_TOKEN_STOKEN (token).length);
|
s = remove_trailing_whitespace (str, str + LS_TOKEN_STOKEN (token).length);
|
||||||
|
|
|
@ -695,7 +695,7 @@ static void
|
||||||
output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
|
output_cores (struct ui_out *uiout, const char *field_name, const char *xcores)
|
||||||
{
|
{
|
||||||
ui_out_emit_list list_emitter (uiout, field_name);
|
ui_out_emit_list list_emitter (uiout, field_name);
|
||||||
gdb::unique_xmalloc_ptr<char> cores (xstrdup (xcores));
|
auto cores = make_unique_xstrdup (xcores);
|
||||||
char *p = cores.get ();
|
char *p = cores.get ();
|
||||||
|
|
||||||
for (p = strtok (p, ","); p; p = strtok (NULL, ","))
|
for (p = strtok (p, ","); p; p = strtok (NULL, ","))
|
||||||
|
|
|
@ -647,7 +647,7 @@ psymtab_search_name (const char *name)
|
||||||
break;
|
break;
|
||||||
}
|
}
|
||||||
|
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (name));
|
return make_unique_xstrdup (name);
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Look, in partial_symtab PST, for symbol whose natural name is NAME.
|
/* Look, in partial_symtab PST, for symbol whose natural name is NAME.
|
||||||
|
|
|
@ -3877,7 +3877,7 @@ test_set_ext_lang_command ()
|
||||||
SELF_CHECK (lang == language_unknown);
|
SELF_CHECK (lang == language_unknown);
|
||||||
|
|
||||||
/* Test adding a new extension using the CLI command. */
|
/* Test adding a new extension using the CLI command. */
|
||||||
gdb::unique_xmalloc_ptr<char> args_holder (xstrdup (".hello rust"));
|
auto args_holder = make_unique_xstrdup (".hello rust");
|
||||||
ext_args = args_holder.get ();
|
ext_args = args_holder.get ();
|
||||||
set_ext_lang_command (NULL, 1, NULL);
|
set_ext_lang_command (NULL, 1, NULL);
|
||||||
|
|
||||||
|
|
|
@ -3106,7 +3106,7 @@ target_fileio_read_stralloc (struct inferior *inf, const char *filename)
|
||||||
return gdb::unique_xmalloc_ptr<char> (nullptr);
|
return gdb::unique_xmalloc_ptr<char> (nullptr);
|
||||||
|
|
||||||
if (transferred == 0)
|
if (transferred == 0)
|
||||||
return gdb::unique_xmalloc_ptr<char> (xstrdup (""));
|
return make_unique_xstrdup ("");
|
||||||
|
|
||||||
bufstr[transferred] = 0;
|
bufstr[transferred] = 0;
|
||||||
|
|
||||||
|
|
|
@ -676,7 +676,7 @@ tui_reggroup_completer (struct cmd_list_element *ignore,
|
||||||
for (tmp = extra; *tmp != NULL; ++tmp)
|
for (tmp = extra; *tmp != NULL; ++tmp)
|
||||||
{
|
{
|
||||||
if (strncmp (word, *tmp, len) == 0)
|
if (strncmp (word, *tmp, len) == 0)
|
||||||
tracker.add_completion (gdb::unique_xmalloc_ptr<char> (xstrdup (*tmp)));
|
tracker.add_completion (make_unique_xstrdup (*tmp));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
@ -2014,11 +2014,7 @@ complete_internalvar (completion_tracker &tracker, const char *name)
|
||||||
|
|
||||||
for (var = internalvars; var; var = var->next)
|
for (var = internalvars; var; var = var->next)
|
||||||
if (strncmp (var->name, name, len) == 0)
|
if (strncmp (var->name, name, len) == 0)
|
||||||
{
|
tracker.add_completion (make_unique_xstrdup (var->name));
|
||||||
gdb::unique_xmalloc_ptr<char> copy (xstrdup (var->name));
|
|
||||||
|
|
||||||
tracker.add_completion (std::move (copy));
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/* Create an internal variable with name NAME and with a void value.
|
/* Create an internal variable with name NAME and with a void value.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue