]> git.ipfire.org Git - thirdparty/binutils-gdb.git/commitdiff
Add cwd paramter to openp
authorTom Tromey <tom@tromey.com>
Sat, 24 Aug 2024 00:46:25 +0000 (18:46 -0600)
committerTom Tromey <tom@tromey.com>
Sat, 19 Oct 2024 19:18:00 +0000 (13:18 -0600)
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

gdb/source.c
gdb/source.h

index 292d2bf71c5cac55677f80792fae2b8eeb147dae..9c54ff24b3aa56b32f5ac2b49cbd4e50adefd3d0 100644 (file)
@@ -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;
index 541ee3b7a1248bbfed4eddd52e5258407b644c0c..33ccda727c67be7e918fac7be2a73a95a26ee07d 100644 (file)
@@ -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> *);