Re: [RFA 03/23] Use gdb_file_up in find_and_open_script

Pedro Alves
2017-06-02T17:24:39Z

On 05/03/2017 11:46 PM, Tom Tromey wrote:
> This changes find_and_open_script to return a gdb_file_up. The result
> is also used to indicate whether the function succeeded, so the patch
> also removes the "streamp" argument; and finally, the type of the
> "full_path" argument is changed to remove more cleanups from the
> callers.
>

This is OK.

> -extern int find_and_open_script (const char *file, int search_path,
> - FILE **streamp, char **full_path);
> +extern gdb_file_up
> + find_and_open_script (const char *file, int search_path,
> + gdb::unique_xmalloc_ptr<char> *full_path);
>

Though I wonder whether using gdb::optional wouldn't look clearer:

/* The script that was opened. */
struct open_script
{
gdb_file_up stream;
gdb::unique_xmalloc_ptr<char> full_path;
};

gdb::optional<open_script>
find_and_open_script (const char *file, int search_path);

open_script opened = find_and_open_script (file, 1 /*search_path*/);

if (opened)
{
if (!file_is_auto_load_safe (res->full_path.get (),
_("auto-load: Loading %s script "
"\"%s\" from section \"%s\" of "
"objfile \"%s\".\n"),
ext_lang_name (language),
opened->full_path.get (),
section_name, objfile_name (objfile)))
opened.reset ();
}

...
/* If this file is not currently loaded, load it. */
if (opened && !in_hash_table)
sourcer (language, objfile, opened->stream, opened->full_path.get ());
}

Thanks,
Pedro Alves