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;
return fd;
}
+/* See source.h. */
+
+gdb::unique_xmalloc_ptr<char>
+find_source_or_rewrite (const char *filename, const char *dirname)
+{
+ gdb::unique_xmalloc_ptr<char> fullname;
+
+ scoped_fd fd = find_and_open_source (filename, dirname, &fullname);
+ 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 (dirname == nullptr || IS_ABSOLUTE_PATH (filename))
+ fullname.reset (xstrdup (filename));
+ else
+ fullname.reset (concat (dirname, SLASH_STRING,
+ filename, (char *) nullptr));
+
+ gdb::unique_xmalloc_ptr<char> rewritten
+ = rewrite_source_path (fullname.get ());
+ if (rewritten != nullptr)
+ fullname = std::move (rewritten);
+ }
+
+ return fullname;
+}
+
/* Finds the fullname that a symtab represents.
This functions finds the fullname and saves it in s->fullname.
const char *dirname,
gdb::unique_xmalloc_ptr<char> *fullname);
+/* A wrapper for find_and_open_source that returns the full name. If
+ the full name cannot be found, a full name is constructed based on
+ the parameters, passing them through rewrite_source_path. */
+
+extern gdb::unique_xmalloc_ptr<char> find_source_or_rewrite
+ (const char *filename, const char *dirname);
+
/* Open a source file given a symtab S. Returns a file descriptor or
negative number for error. */
extern scoped_fd open_source_file (struct symtab *s);