Remove two cleanups using std::string

This patches removes cleanups from a couple of spots by using
std::string rather than manual memory management.

Regression tested by the buildbot, though note that I don't believe
the buildbot actually exercises the machoread code.

gdb/ChangeLog
2018-03-13  Tom Tromey  <tom@tromey.com>

	* machoread.c (macho_check_dsym): Change filenamep to a
	std::string*.
	(macho_symfile_read): Update.
	* symfile.c (load_command): Use std::string.
This commit is contained in:
Tom Tromey 2018-02-22 16:31:15 -07:00
parent e45ad1239d
commit b577b6af8e
3 changed files with 26 additions and 37 deletions

View file

@ -1,3 +1,10 @@
2018-03-13 Tom Tromey <tom@tromey.com>
* machoread.c (macho_check_dsym): Change filenamep to a
std::string*.
(macho_symfile_read): Update.
* symfile.c (load_command): Use std::string.
2018-03-12 Andrew Burgess <andrew.burgess@embecosm.com> 2018-03-12 Andrew Burgess <andrew.burgess@embecosm.com>
* riscv-tdep.c (riscv_sw_breakpoint_from_kind): Add localization * riscv-tdep.c (riscv_sw_breakpoint_from_kind): Add localization

View file

@ -750,12 +750,12 @@ macho_symfile_read_all_oso (VEC (oso_el) **oso_vector_ptr,
#define DSYM_SUFFIX ".dSYM/Contents/Resources/DWARF/" #define DSYM_SUFFIX ".dSYM/Contents/Resources/DWARF/"
/* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it /* Check if a dsym file exists for OBJFILE. If so, returns a bfd for it
and return *FILENAMEP with its original xmalloc-ated filename. and return *FILENAMEP with its original filename.
Return NULL if no valid dsym file is found (FILENAMEP is not used in Return NULL if no valid dsym file is found (FILENAMEP is not used in
such case). */ such case). */
static gdb_bfd_ref_ptr static gdb_bfd_ref_ptr
macho_check_dsym (struct objfile *objfile, char **filenamep) macho_check_dsym (struct objfile *objfile, std::string *filenamep)
{ {
size_t name_len = strlen (objfile_name (objfile)); size_t name_len = strlen (objfile_name (objfile));
size_t dsym_len = strlen (DSYM_SUFFIX); size_t dsym_len = strlen (DSYM_SUFFIX);
@ -804,7 +804,7 @@ macho_check_dsym (struct objfile *objfile, char **filenamep)
objfile_name (objfile)); objfile_name (objfile));
return NULL; return NULL;
} }
*filenamep = xstrdup (dsym_filename); *filenamep = std::string (dsym_filename);
return dsym_bfd; return dsym_bfd;
} }
@ -821,7 +821,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
be in the executable. */ be in the executable. */
if (bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC)) if (bfd_get_file_flags (abfd) & (EXEC_P | DYNAMIC))
{ {
char *dsym_filename; std::string dsym_filename;
/* Process the normal symbol table first. */ /* Process the normal symbol table first. */
storage_needed = bfd_get_symtab_upper_bound (objfile->obfd); storage_needed = bfd_get_symtab_upper_bound (objfile->obfd);
@ -865,8 +865,6 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
{ {
struct bfd_section *asect, *dsect; struct bfd_section *asect, *dsect;
make_cleanup (xfree, dsym_filename);
if (mach_o_debug_level > 0) if (mach_o_debug_level > 0)
printf_unfiltered (_("dsym file found\n")); printf_unfiltered (_("dsym file found\n"));
@ -882,7 +880,7 @@ macho_symfile_read (struct objfile *objfile, symfile_add_flags symfile_flags)
} }
/* Add the dsym file as a separate file. */ /* Add the dsym file as a separate file. */
symbol_file_add_separate (dsym_bfd.get (), dsym_filename, symbol_file_add_separate (dsym_bfd.get (), dsym_filename.c_str (),
symfile_flags, objfile); symfile_flags, objfile);
/* Don't try to read dwarf2 from main file or shared libraries. */ /* Don't try to read dwarf2 from main file or shared libraries. */

View file

@ -1789,8 +1789,6 @@ find_sym_fns (bfd *abfd)
static void static void
load_command (const char *arg, int from_tty) load_command (const char *arg, int from_tty)
{ {
struct cleanup *cleanup = make_cleanup (null_cleanup, NULL);
dont_repeat (); dont_repeat ();
/* The user might be reloading because the binary has changed. Take /* The user might be reloading because the binary has changed. Take
@ -1798,40 +1796,28 @@ load_command (const char *arg, int from_tty)
reopen_exec_file (); reopen_exec_file ();
reread_symbols (); reread_symbols ();
std::string temp;
if (arg == NULL) if (arg == NULL)
{ {
const char *parg; const char *parg, *prev;
int count = 0;
parg = arg = get_exec_file (1); arg = get_exec_file (1);
/* Count how many \ " ' tab space there are in the name. */ /* We may need to quote this string so buildargv can pull it
apart. */
prev = parg = arg;
while ((parg = strpbrk (parg, "\\\"'\t "))) while ((parg = strpbrk (parg, "\\\"'\t ")))
{ {
parg++; temp.append (prev, parg - prev);
count++; prev = parg++;
temp.push_back ('\\');
} }
/* If we have not copied anything yet, then we didn't see a
if (count) character to quote, and we can just leave ARG unchanged. */
if (!temp.empty ())
{ {
/* We need to quote this string so buildargv can pull it apart. */ temp.append (prev);
char *temp = (char *) xmalloc (strlen (arg) + count + 1 ); arg = temp.c_str ();
char *ptemp = temp;
const char *prev;
make_cleanup (xfree, temp);
prev = parg = arg;
while ((parg = strpbrk (parg, "\\\"'\t ")))
{
strncpy (ptemp, prev, parg - prev);
ptemp += parg - prev;
prev = parg++;
*ptemp++ = '\\';
}
strcpy (ptemp, prev);
arg = temp;
} }
} }
@ -1840,8 +1826,6 @@ load_command (const char *arg, int from_tty)
/* After re-loading the executable, we don't really know which /* After re-loading the executable, we don't really know which
overlays are mapped any more. */ overlays are mapped any more. */
overlay_cache_invalid = 1; overlay_cache_invalid = 1;
do_cleanups (cleanup);
} }
/* This version of "load" should be usable for any target. Currently /* This version of "load" should be usable for any target. Currently