Change gdb_realpath to return a unique_xmalloc_ptr

This changes gdb_realpath to return a unique_xmalloc_ptr and fixes up
the callers.  This allows removing some cleanups.  This change by
itself caused xfullpath.exp to fail; and attempting to fix that ran
into various problems (like .get() being optimized out); so this patch
also rewrites xfullpath.exp to be a C++ selftest instead.

ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

	* exec.c (exec_file_attach): Update.
	* linux-thread-db.c (try_thread_db_load): Update.
	* guile/scm-safe-call.c (gdbscm_safe_source_script): Update.
	* utils.c (gdb_realpath): Change return type.
	(gdb_realpath_keepfile): Update.
	(gdb_realpath_check_trailer, gdb_realpath_tests): New functions.
	(_initialize_utils): Register the new self test.
	* source.c (openp): Update.
	(find_and_open_source): Update.
	* nto-tdep.c (nto_find_and_open_solib): Update.
	* main.c (set_gdb_data_directory): Update.
	(captured_main_1): Update.
	* dwarf2read.c (dwarf2_get_dwz_file): Update
	(dw2_map_symbol_filenames): Update.
	* auto-load.c (auto_load_safe_path_vec_update): Update.
	(filename_is_in_auto_load_safe_path_vec): Change type of
	"filename_realp".
	(auto_load_objfile_script): Update.
	(file_is_auto_load_safe): Update.  Use std::string.
	* utils.h (gdb_realpath): Return a gdb::unique_xmalloc_ptr.

testsuite/ChangeLog
2017-08-22  Tom Tromey  <tom@tromey.com>

	* gdb.gdb/xfullpath.exp: Remove.
This commit is contained in:
Tom Tromey
2017-08-03 16:53:22 -06:00
parent 4971c9a74b
commit 14278e1fdb
15 changed files with 130 additions and 145 deletions

View File

@ -438,19 +438,18 @@ gdbscm_safe_source_script (const char *filename)
%load-path, but we don't want %load-path to be searched. At least not
by default. This function is invoked by the "source" GDB command which
already has its own path search support. */
char *abs_filename = NULL;
gdb::unique_xmalloc_ptr<char> abs_filename;
const char *result;
if (!IS_ABSOLUTE_PATH (filename))
{
abs_filename = gdb_realpath (filename);
filename = abs_filename;
filename = abs_filename.get ();
}
result = gdbscm_with_guile (scscm_source_scheme_script,
(void *) filename);
xfree (abs_filename);
if (result != NULL)
return xstrdup (result);
return NULL;