From: Tom Tromey Date: Sat, 24 Aug 2024 00:46:25 +0000 (-0600) Subject: Add cwd paramter to openp X-Git-Tag: gdb-16-branchpoint~632 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=f4ab1188c055d65c99663902317eb5ec4cfc7271;p=thirdparty%2Fbinutils-gdb.git 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 --- diff --git a/gdb/source.c b/gdb/source.c index 292d2bf71c5..9c54ff24b3a 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 *filename_opened) + int mode, gdb::unique_xmalloc_ptr *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 541ee3b7a12..33ccda727c6 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 *); + gdb::unique_xmalloc_ptr *, + const char *cwd = current_directory); extern int source_full_path_of (const char *, gdb::unique_xmalloc_ptr *);