Change auto_load_objfile_script_1 to use std::string

This replaces some manual string manipulation in
auto_load_objfile_script_1 with std::string, simplifying the code and
allowing the removal of some cleanups.

Tested by the buildbot.

2018-03-17  Tom Tromey  <tom@tromey.com>

	* auto-load.c (auto_load_objfile_script_1): Use std::string.
This commit is contained in:
Tom Tromey 2018-03-16 17:02:11 -06:00
parent 770623f79f
commit a06ab151cb
2 changed files with 12 additions and 18 deletions

View File

@ -1,3 +1,7 @@
2018-03-17 Tom Tromey <tom@tromey.com>
* auto-load.c (auto_load_objfile_script_1): Use std::string.
2018-03-17 Tom Tromey <tom@tromey.com>
* target.c (class scoped_target_fd): New.

View File

@ -769,24 +769,19 @@ static int
auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
const struct extension_language_defn *language)
{
char *filename, *debugfile;
int len, retval;
struct cleanup *cleanups;
const char *debugfile;
int retval;
const char *suffix = ext_lang_auto_load_suffix (language);
len = strlen (realname);
filename = (char *) xmalloc (len + strlen (suffix) + 1);
memcpy (filename, realname, len);
strcpy (filename + len, suffix);
std::string filename = std::string (realname) + suffix;
cleanups = make_cleanup (xfree, filename);
gdb_file_up input = gdb_fopen_cloexec (filename, "r");
debugfile = filename;
gdb_file_up input = gdb_fopen_cloexec (filename.c_str (), "r");
debugfile = filename.c_str ();
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file \"%s\" %s.\n"),
debugfile, input ? _("exists") : _("does not exist"));
std::string debugfile_holder;
if (!input)
{
/* Also try the same file in a subdirectory of gdb's data
@ -802,14 +797,10 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
for (const gdb::unique_xmalloc_ptr<char> &dir : vec)
{
debugfile = (char *) xmalloc (strlen (dir.get ())
+ strlen (filename) + 1);
strcpy (debugfile, dir.get ());
/* FILENAME is absolute, so we don't need a "/" here. */
strcat (debugfile, filename);
debugfile_holder = dir.get () + filename;
debugfile = debugfile_holder.c_str ();
make_cleanup (xfree, debugfile);
input = gdb_fopen_cloexec (debugfile, "r");
if (debug_auto_load)
fprintf_unfiltered (gdb_stdlog, _("auto-load: Attempted file "
@ -862,7 +853,6 @@ auto_load_objfile_script_1 (struct objfile *objfile, const char *realname,
else
retval = 0;
do_cleanups (cleanups);
return retval;
}