diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/defs.h src/gdb/defs.h --- src.orig/gdb/defs.h 2004-07-17 18:06:35.000000000 +0200 +++ src/gdb/defs.h 2004-07-17 18:22:20.000000000 +0200 @@ -610,6 +610,9 @@ extern void print_address (CORE_ADDR, st /* From source.c */ +#define OPF_TRY_CWD_FIRST 0x01 +#define OPF_SEARCH_IN_PATH 0x02 + extern int openp (const char *, int, const char *, int, int, char **); extern int source_full_path_of (char *, char **); diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/exec.c src/gdb/exec.c --- src.orig/gdb/exec.c 2004-04-24 19:11:14.000000000 +0200 +++ src/gdb/exec.c 2004-07-17 18:22:21.000000000 +0200 @@ -194,7 +194,7 @@ exec_file_attach (char *filename, int fr char *scratch_pathname; int scratch_chan; - scratch_chan = openp (getenv ("PATH"), 1, filename, + scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename, write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY, 0, &scratch_pathname); #if defined(__GO32__) || defined(_WIN32) || defined(__CYGWIN__) @@ -202,8 +202,9 @@ exec_file_attach (char *filename, int fr { char *exename = alloca (strlen (filename) + 5); strcat (strcpy (exename, filename), ".exe"); - scratch_chan = openp (getenv ("PATH"), 1, exename, write_files ? - O_RDWR | O_BINARY : O_RDONLY | O_BINARY, 0, &scratch_pathname); + scratch_chan = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename, + write_files ? O_RDWR | O_BINARY : O_RDONLY | O_BINARY, 0, + &scratch_pathname); } #endif if (scratch_chan < 0) diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/nto-tdep.c src/gdb/nto-tdep.c --- src.orig/gdb/nto-tdep.c 2004-04-24 19:11:15.000000000 +0200 +++ src/gdb/nto-tdep.c 2004-07-17 18:22:21.000000000 +0200 @@ -115,7 +115,7 @@ nto_find_and_open_solib (char *solib, un sprintf (buf, path_fmt, arch_path, arch_path, arch_path, arch_path, arch_path); - return openp (buf, 1, solib, o_flags, 0, temp_pathname); + return openp (buf, OPF_TRY_CWD_FIRST, solib, o_flags, 0, temp_pathname); } void diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/pa64solib.c src/gdb/pa64solib.c --- src.orig/gdb/pa64solib.c 2004-05-08 21:02:29.000000000 +0200 +++ src/gdb/pa64solib.c 2004-07-17 18:22:21.000000000 +0200 @@ -157,8 +157,8 @@ pa64_solib_sizeof_symbol_table (char *fi /* We believe that filename was handed to us by the dynamic linker, and is therefore always an absolute path. */ - desc = openp (getenv ("PATH"), 1, filename, O_RDONLY | O_BINARY, - 0, &absolute_name); + desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename, + O_RDONLY | O_BINARY, 0, &absolute_name); if (desc < 0) { perror_with_name (filename); diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/solib.c src/gdb/solib.c --- src.orig/gdb/solib.c 2004-03-11 18:04:40.000000000 +0100 +++ src/gdb/solib.c 2004-07-17 18:22:21.000000000 +0200 @@ -156,15 +156,15 @@ solib_open (char *in_pathname, char **fo /* If not found, search the solib_search_path (if any). */ if (found_file < 0 && solib_search_path != NULL) - found_file = openp (solib_search_path, - 1, in_pathname, O_RDONLY, 0, &temp_pathname); + found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST, + in_pathname, O_RDONLY, 0, &temp_pathname); /* If not found, next search the solib_search_path (if any) for the basename only (ignoring the path). This is to allow reading solibs from a path that differs from the opened path. */ if (found_file < 0 && solib_search_path != NULL) - found_file = openp (solib_search_path, - 1, lbasename (in_pathname), O_RDONLY, 0, + found_file = openp (solib_search_path, OPF_TRY_CWD_FIRST, + lbasename (in_pathname), O_RDONLY, 0, &temp_pathname); /* If not found, try to use target supplied solib search method */ @@ -175,13 +175,15 @@ solib_open (char *in_pathname, char **fo /* If not found, next search the inferior's $PATH environment variable. */ if (found_file < 0 && solib_absolute_prefix == NULL) found_file = openp (get_in_environ (inferior_environ, "PATH"), - 1, in_pathname, O_RDONLY, 0, &temp_pathname); + OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY, 0, + &temp_pathname); /* If not found, next search the inferior's $LD_LIBRARY_PATH environment variable. */ if (found_file < 0 && solib_absolute_prefix == NULL) found_file = openp (get_in_environ (inferior_environ, "LD_LIBRARY_PATH"), - 1, in_pathname, O_RDONLY, 0, &temp_pathname); + OPF_TRY_CWD_FIRST, in_pathname, O_RDONLY, 0, + &temp_pathname); /* Done. If not found, tough luck. Return found_file and (optionally) found_pathname. */ diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/somsolib.c src/gdb/somsolib.c --- src.orig/gdb/somsolib.c 2004-05-19 20:08:14.000000000 +0200 +++ src/gdb/somsolib.c 2004-07-17 18:22:21.000000000 +0200 @@ -216,7 +216,8 @@ som_solib_sizeof_symbol_table (char *fil /* We believe that filename was handed to us by the dynamic linker, and is therefore always an absolute path. */ - desc = openp (getenv ("PATH"), 1, filename, O_RDONLY | O_BINARY, 0, &absolute_name); + desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, filename, + O_RDONLY | O_BINARY, 0, &absolute_name); if (desc < 0) { perror_with_name (filename); diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/source.c src/gdb/source.c --- src.orig/gdb/source.c 2004-06-27 22:33:07.000000000 +0200 +++ src/gdb/source.c 2004-07-17 18:23:23.000000000 +0200 @@ -636,12 +636,18 @@ is_regular_file (const char *name) /* Open a file named STRING, searching path PATH (dir names sep by some char) using mode MODE and protection bits PROT in the calls to open. - If TRY_CWD_FIRST, try to open ./STRING before searching PATH. + OPTS specifies the function behaviour in specific cases. + + If OPF_TRY_CWD_FIRST, try to open ./STRING before searching PATH. (ie pretend the first element of PATH is "."). This also indicates that a slash in STRING disables searching of the path (this is so that "exec-file ./foo" or "symbol-file ./foo" insures that you get that particular version of foo or an error message). + If OPTS has OPF_SEARCH_IN_PATH set, absolute names will also be + searched in path (we usually want this for source files but not for + executables). + If FILENAME_OPENED is non-null, set it to a newly allocated string naming the actual file opened (this string will always start with a "/"). We have to take special pains to avoid doubling the "/" between the directory @@ -654,7 +660,7 @@ is_regular_file (const char *name) /* >>>> This should only allow files of certain types, >>>> eg executable, non-directory */ int -openp (const char *path, int try_cwd_first, const char *string, +openp (const char *path, int opts, const char *string, int mode, int prot, char **filename_opened) { @@ -672,7 +678,7 @@ openp (const char *path, int try_cwd_fir mode |= O_BINARY; #endif - if (try_cwd_first || IS_ABSOLUTE_PATH (string)) + if ((opts & OPF_TRY_CWD_FIRST) || IS_ABSOLUTE_PATH (string)) { int i; @@ -690,11 +696,16 @@ openp (const char *path, int try_cwd_fir fd = -1; } - for (i = 0; string[i]; i++) - if (IS_DIR_SEPARATOR (string[i])) - goto done; + if (!(opts & OPF_SEARCH_IN_PATH)) + for (i = 0; string[i]; i++) + if (IS_DIR_SEPARATOR (string[i])) + goto done; } + /* /foo => foo, to avoid multiple slashes that Emacs doesn't like. */ + while (IS_DIR_SEPARATOR(string[0])) + string++; + /* ./foo => foo */ while (string[0] == '.' && IS_DIR_SEPARATOR (string[1])) string += 2; @@ -793,7 +804,8 @@ source_full_path_of (char *filename, cha { int fd; - fd = openp (source_path, 1, filename, O_RDONLY, 0, full_pathname); + fd = openp (source_path, OPF_TRY_CWD_FIRST | OPF_SEARCH_IN_PATH, filename, + O_RDONLY, 0, full_pathname); if (fd < 0) { *full_pathname = NULL; @@ -864,13 +876,13 @@ find_and_open_source (struct objfile *ob } } - result = openp (path, 0, filename, OPEN_MODE, 0, fullname); + result = openp (path, OPF_SEARCH_IN_PATH, filename, OPEN_MODE, 0, fullname); if (result < 0) { /* Didn't work. Try using just the basename. */ p = lbasename (filename); if (p != filename) - result = openp (path, 0, p, OPEN_MODE, 0, fullname); + result = openp (path, OPF_SEARCH_IN_PATH, p, OPEN_MODE, 0, fullname); } if (result >= 0) diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/symfile.c src/gdb/symfile.c --- src.orig/gdb/symfile.c 2004-07-15 23:58:03.000000000 +0200 +++ src/gdb/symfile.c 2004-07-17 18:22:21.000000000 +0200 @@ -1221,14 +1221,15 @@ symfile_bfd_open (char *name) name = tilde_expand (name); /* Returns 1st new malloc'd copy */ /* Look down path for it, allocate 2nd new malloc'd copy. */ - desc = openp (getenv ("PATH"), 1, name, O_RDONLY | O_BINARY, 0, &absolute_name); + desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, name, O_RDONLY | O_BINARY, + 0, &absolute_name); #if defined(__GO32__) || defined(_WIN32) || defined (__CYGWIN__) if (desc < 0) { char *exename = alloca (strlen (name) + 5); strcat (strcpy (exename, name), ".exe"); - desc = openp (getenv ("PATH"), 1, exename, O_RDONLY | O_BINARY, - 0, &absolute_name); + desc = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, exename, + O_RDONLY | O_BINARY, 0, &absolute_name); } #endif if (desc < 0) diff -Naurp -X /home/ibr/tmp/root/prg/dontdiff.ibr src.orig/gdb/wince.c src/gdb/wince.c --- src.orig/gdb/wince.c 2004-06-25 22:11:54.000000000 +0200 +++ src/gdb/wince.c 2004-07-17 18:22:21.000000000 +0200 @@ -1586,7 +1586,8 @@ upload_to_device (const char *to, const return remotefile; /* Don't bother uploading. */ /* Open the source. */ - if ((fd = openp (getenv ("PATH"), TRUE, (char *) from, O_RDONLY, 0, NULL)) < 0) + if ((fd = openp (getenv ("PATH"), OPF_TRY_CWD_FIRST, (char *) from, O_RDONLY, + 0, NULL)) < 0) error ("couldn't open %s", from); /* Get the time for later comparison. */