aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorTom Tromey <tom@tromey.com>2021-06-04 16:00:33 -0600
committerTom Tromey <tom@tromey.com>2021-11-05 13:58:48 -0600
commitbe77dd73c769b3e7ac62bd4c0b98242b62d080e0 (patch)
tree42467dc2ff4b18810660886835c51503b6ffacb7
parent8a89ddbda2ecb41be0f12142e5d4b95c7bd5a138 (diff)
downloadgdb-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.c7
-rw-r--r--gdb/parse.c3
-rw-r--r--gdbsupport/gdb_unique_ptr.h9
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 */