diff options
author | Tom Tromey <tom@tromey.com> | 2024-08-23 18:46:25 -0600 |
---|---|---|
committer | Tom Tromey <tom@tromey.com> | 2024-10-19 13:18:00 -0600 |
commit | f4ab1188c055d65c99663902317eb5ec4cfc7271 (patch) | |
tree | 33ebf54c8ac59e76f18028d2f6a9098c485d7d09 | |
parent | 03ace3807c891427019686f4137ad0257d63e138 (diff) | |
download | gdb-f4ab1188c055d65c99663902317eb5ec4cfc7271.zip gdb-f4ab1188c055d65c99663902317eb5ec4cfc7271.tar.gz gdb-f4ab1188c055d65c99663902317eb5ec4cfc7271.tar.bz2 |
Add cwd paramter to openp
This patch adds a cwd paramter to openp, so that the current directory
can be passed in by the caller. This is useful when background
threads call this function -- they can then avoid using the global and
thus avoid races with the user using "cd".
Bug: https://sourceware.org/bugzilla/show_bug.cgi?id=31716
-rw-r--r-- | gdb/source.c | 9 | ||||
-rw-r--r-- | gdb/source.h | 4 |
2 files changed, 8 insertions, 5 deletions
diff --git a/gdb/source.c b/gdb/source.c index 292d2bf..9c54ff2 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -770,7 +770,8 @@ prepare_path_for_appending (const char *path) >>>> eg executable, non-directory. */ int openp (const char *path, openp_flags opts, const char *string, - int mode, gdb::unique_xmalloc_ptr<char> *filename_opened) + int mode, gdb::unique_xmalloc_ptr<char> *filename_opened, + const char *cwd) { int fd; char *filename; @@ -851,14 +852,14 @@ openp (const char *path, openp_flags opts, const char *string, int newlen; /* First, realloc the filename buffer if too short. */ - len = strlen (current_directory); + len = strlen (cwd); newlen = len + strlen (string) + 2; if (newlen > alloclen) { alloclen = newlen; filename = (char *) alloca (alloclen); } - strcpy (filename, current_directory); + strcpy (filename, cwd); } else if (strchr(dir, '~')) { @@ -921,7 +922,7 @@ done: *filename_opened = gdb_realpath (filename); else *filename_opened - = make_unique_xstrdup (gdb_abspath (filename).c_str ()); + = make_unique_xstrdup (gdb_abspath (filename, cwd).c_str ()); } errno = last_errno; diff --git a/gdb/source.h b/gdb/source.h index 541ee3b..33ccda7 100644 --- a/gdb/source.h +++ b/gdb/source.h @@ -19,6 +19,7 @@ #ifndef SOURCE_H #define SOURCE_H +#include "gdbsupport/pathstuff.h" #include "gdbsupport/scoped_fd.h" struct program_space; @@ -37,7 +38,8 @@ enum openp_flag DEF_ENUM_FLAGS_TYPE(openp_flag, openp_flags); extern int openp (const char *, openp_flags, const char *, int, - gdb::unique_xmalloc_ptr<char> *); + gdb::unique_xmalloc_ptr<char> *, + const char *cwd = current_directory); extern int source_full_path_of (const char *, gdb::unique_xmalloc_ptr<char> *); |