Introduce find_source_or_rewrite

The final bug fix in this series would duplicate the logic in
psymtab_to_fullname, so this patch extracts the body of this function
into a new function.
This commit is contained in:
Tom Tromey 2021-07-04 13:26:15 -06:00
parent d030267c9c
commit 4584f33d68
3 changed files with 37 additions and 19 deletions

View file

@ -953,26 +953,9 @@ psymtab_to_fullname (struct partial_symtab *ps)
to handle cases like the file being moved. */
if (ps->fullname == NULL)
{
gdb::unique_xmalloc_ptr<char> fullname;
scoped_fd fd = find_and_open_source (ps->filename, ps->dirname,
&fullname);
gdb::unique_xmalloc_ptr<char> fullname
= find_source_or_rewrite (ps->filename, ps->dirname);
ps->fullname = fullname.release ();
if (fd.get () < 0)
{
/* rewrite_source_path would be applied by find_and_open_source, we
should report the pathname where GDB tried to find the file. */
if (ps->dirname == NULL || IS_ABSOLUTE_PATH (ps->filename))
fullname.reset (xstrdup (ps->filename));
else
fullname.reset (concat (ps->dirname, SLASH_STRING,
ps->filename, (char *) NULL));
ps->fullname = rewrite_source_path (fullname.get ()).release ();
if (ps->fullname == NULL)
ps->fullname = fullname.release ();
}
}
return ps->fullname;