diff options
author | Tom Tromey <tom@tromey.com> | 2021-06-04 16:00:33 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2021-11-05 13:58:48 -0600 |
commit | be77dd73c769b3e7ac62bd4c0b98242b62d080e0 (patch) | |
tree | 42467dc2ff4b18810660886835c51503b6ffacb7 | |
parent | 8a89ddbda2ecb41be0f12142e5d4b95c7bd5a138 (diff) | |
download | gdb-be77dd73c769b3e7ac62bd4c0b98242b62d080e0.zip gdb-be77dd73c769b3e7ac62bd4c0b98242b62d080e0.tar.gz gdb-be77dd73c769b3e7ac62bd4c0b98242b62d080e0.tar.bz2 |
Introduce make_unique_xstrndup
This adds a new make_unique_xstrndup function, which is the "n"
analogue of make_unique_xstrdup. It also updates a couple existing
places to use this function.
-rw-r--r-- | gdb/cli/cli-setshow.c | 7 | ||||
-rw-r--r-- | gdb/parse.c | 3 | ||||
-rw-r--r-- | gdbsupport/gdb_unique_ptr.h | 9 |
3 files changed, 14 insertions, 5 deletions
diff --git a/gdb/cli/cli-setshow.c b/gdb/cli/cli-setshow.c index dcb50ca..18e2d4e 100644 --- a/gdb/cli/cli-setshow.c +++ b/gdb/cli/cli-setshow.c @@ -375,14 +375,13 @@ do_set_command (const char *arg, int from_tty, struct cmd_list_element *c) { /* Clear trailing whitespace of filename. */ const char *ptr = arg + strlen (arg) - 1; - char *copy; while (ptr >= arg && (*ptr == ' ' || *ptr == '\t')) ptr--; - copy = xstrndup (arg, ptr + 1 - arg); + gdb::unique_xmalloc_ptr<char> copy + = make_unique_xstrndup (arg, ptr + 1 - arg); - val = tilde_expand (copy); - xfree (copy); + val = tilde_expand (copy.get ()); } else val = xstrdup (""); diff --git a/gdb/parse.c b/gdb/parse.c index b2f23eb..a76a6c1 100644 --- a/gdb/parse.c +++ b/gdb/parse.c @@ -199,7 +199,8 @@ parser_state::mark_completion_tag (enum type_code tag, const char *ptr, || tag == TYPE_CODE_STRUCT || tag == TYPE_CODE_ENUM); m_completion_state.expout_tag_completion_type = tag; - m_completion_state.expout_completion_name.reset (xstrndup (ptr, length)); + m_completion_state.expout_completion_name + = make_unique_xstrndup (ptr, length); } /* See parser-defs.h. */ diff --git a/gdbsupport/gdb_unique_ptr.h b/gdbsupport/gdb_unique_ptr.h index df88cea..77aecb4 100644 --- a/gdbsupport/gdb_unique_ptr.h +++ b/gdbsupport/gdb_unique_ptr.h @@ -64,4 +64,13 @@ make_unique_xstrdup (const char *str) return gdb::unique_xmalloc_ptr<char> (xstrdup (str)); } +/* Dup the first N characters of STR and return a unique_xmalloc_ptr + for the result. The result is always \0-terminated. */ + +static inline gdb::unique_xmalloc_ptr<char> +make_unique_xstrndup (const char *str, size_t n) +{ + return gdb::unique_xmalloc_ptr<char> (xstrndup (str, n)); +} + #endif /* COMMON_GDB_UNIQUE_PTR_H */ |