diff options
author | Tom Tromey <tromey@adacore.com> | 2024-07-29 09:38:29 -0600 |
---|---|---|
committer | Tom Tromey <tromey@adacore.com> | 2024-08-12 12:16:15 -0600 |
commit | 219036b4fa83d2d1ec7f2ee74938610adaf7b4cd (patch) | |
tree | 88310503e127902a0ce917de92cfe7ffb450790e /gdb | |
parent | a86cec1a6f5127fc66737f95c2ba7938a755b63f (diff) | |
download | gdb-219036b4fa83d2d1ec7f2ee74938610adaf7b4cd.zip gdb-219036b4fa83d2d1ec7f2ee74938610adaf7b4cd.tar.gz gdb-219036b4fa83d2d1ec7f2ee74938610adaf7b4cd.tar.bz2 |
Simplify typename_concat
This patch simplifies typename_concat, changing the return type and
removing the obstack allocation code. The latter is possible because
the only caller using this mode uses the name when creating a new
type, and 'new_type' copies the string to the appropriate obstack
anyway. It also changes typename_concat to use 'concat'. This change
lets us remove a mildly fragile macro as well.
Approved-By: Simon Marchi <simon.marchi@efficios.com>
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/dwarf2/read.c | 53 |
1 files changed, 20 insertions, 33 deletions
diff --git a/gdb/dwarf2/read.c b/gdb/dwarf2/read.c index a0013f7..fde8eee 100644 --- a/gdb/dwarf2/read.c +++ b/gdb/dwarf2/read.c @@ -863,9 +863,10 @@ static struct type *read_type_die_1 (struct die_info *, struct dwarf2_cu *); static const char *determine_prefix (struct die_info *die, struct dwarf2_cu *); -static char *typename_concat (struct obstack *obs, const char *prefix, - const char *suffix, int physname, - struct dwarf2_cu *cu); +static gdb::unique_xmalloc_ptr<char> typename_concat (const char *prefix, + const char *suffix, + int physname, + struct dwarf2_cu *cu); static void read_file_scope (struct die_info *, struct dwarf2_cu *); @@ -6673,7 +6674,7 @@ dwarf2_compute_name (const char *name, if (*prefix != '\0') { gdb::unique_xmalloc_ptr<char> prefixed_name - (typename_concat (NULL, prefix, name, physname, cu)); + = typename_concat (prefix, name, physname, cu); buf.puts (prefixed_name.get ()); } @@ -13986,9 +13987,12 @@ read_namespace_type (struct die_info *die, struct dwarf2_cu *cu) /* Now build the name of the current namespace. */ previous_prefix = determine_prefix (die, cu); + gdb::unique_xmalloc_ptr<char> name_storage; if (previous_prefix[0] != '\0') - name = typename_concat (&objfile->objfile_obstack, - previous_prefix, name, 0, cu); + { + name_storage = typename_concat (previous_prefix, name, 0, cu); + name = name_storage.get (); + } /* Create the type. */ type = type_allocator (objfile, cu->lang ()).new_type (TYPE_CODE_NAMESPACE, @@ -19998,17 +20002,15 @@ determine_prefix (struct die_info *die, struct dwarf2_cu *cu) } } -/* Return a newly-allocated string formed by concatenating PREFIX and SUFFIX - with appropriate separator. If PREFIX or SUFFIX is NULL or empty, then - simply copy the SUFFIX or PREFIX, respectively. If OBS is non-null, perform - an obconcat, otherwise allocate storage for the result. The CU argument is - used to determine the language and hence, the appropriate separator. */ - -#define MAX_SEP_LEN 7 /* strlen ("__") + strlen ("_MOD_") */ +/* Return a newly-allocated string formed by concatenating PREFIX and + SUFFIX with appropriate separator. If PREFIX or SUFFIX is NULL or + empty, then simply copy the SUFFIX or PREFIX, respectively. The CU + argument is used to determine the language and hence, the + appropriate separator. */ -static char * -typename_concat (struct obstack *obs, const char *prefix, const char *suffix, - int physname, struct dwarf2_cu *cu) +static gdb::unique_xmalloc_ptr<char> +typename_concat (const char *prefix, const char *suffix, int physname, + struct dwarf2_cu *cu) { const char *lead = ""; const char *sep; @@ -20044,23 +20046,8 @@ typename_concat (struct obstack *obs, const char *prefix, const char *suffix, if (suffix == NULL) suffix = ""; - if (obs == NULL) - { - char *retval - = ((char *) - xmalloc (strlen (prefix) + MAX_SEP_LEN + strlen (suffix) + 1)); - - strcpy (retval, lead); - strcat (retval, prefix); - strcat (retval, sep); - strcat (retval, suffix); - return retval; - } - else - { - /* We have an obstack. */ - return obconcat (obs, lead, prefix, sep, suffix, (char *) NULL); - } + return gdb::unique_xmalloc_ptr<char> (concat (lead, prefix, sep, suffix, + nullptr)); } /* Return a generic name for a DW_TAG_template_type_param or |