diff options
author | Gary Benson <gbenson@redhat.com> | 2015-04-29 15:20:22 +0100 |
---|---|---|
committer | Gary Benson <gbenson@redhat.com> | 2015-04-29 15:20:22 +0100 |
commit | 998d2a3ef31378d3d980972dc68f4926b720a7e9 (patch) | |
tree | 368ec6a68f148273e08b1ebd73641e0182f21666 /gdb | |
parent | a93d5cb1976818c8d34133fd8798b3df76269f80 (diff) | |
download | binutils-gdb-998d2a3ef31378d3d980972dc68f4926b720a7e9.tar.gz |
Allow passing fd == NULL to exec_file_find and solib_find
This commit allows NULL to be passed as the int *fd argument
to exec_file_find and solib_find to simplify use cases where
the caller does not require the file to be opened.
gdb/ChangeLog:
* solib.c (solib_find_1): Allow fd argument to be NULL.
(exec_file_find): Update comment.
(solib_find): Likewise.
* exec.c (exec_file_locate_attach): Use NULL as fd
argument to exec_file_find to avoid having to close
the opened file.
* infrun.c (follow_exec): Likewise.
Diffstat (limited to 'gdb')
-rw-r--r-- | gdb/ChangeLog | 10 | ||||
-rw-r--r-- | gdb/exec.c | 8 | ||||
-rw-r--r-- | gdb/infrun.c | 7 | ||||
-rw-r--r-- | gdb/solib.c | 25 |
4 files changed, 29 insertions, 21 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 92d972e7b52..425282c9450 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,3 +1,13 @@ +2015-04-29 Gary Benson <gbenson@redhat.com> + + * solib.c (solib_find_1): Allow fd argument to be NULL. + (exec_file_find): Update comment. + (solib_find): Likewise. + * exec.c (exec_file_locate_attach): Use NULL as fd + argument to exec_file_find to avoid having to close + the opened file. + * infrun.c (follow_exec): Likewise. + 2015-04-28 Doug Evans <dje@google.com> PR python/18299 diff --git a/gdb/exec.c b/gdb/exec.c index 872b86c6980..8a4ab6f0832 100644 --- a/gdb/exec.c +++ b/gdb/exec.c @@ -156,13 +156,7 @@ exec_file_locate_attach (int pid, int from_tty) is absolute then prefix the filename with gdb_sysroot. */ if (gdb_sysroot != NULL && *gdb_sysroot != '\0' && IS_ABSOLUTE_PATH (exec_file)) - { - int fd = -1; - - full_exec_path = exec_file_find (exec_file, &fd); - if (fd >= 0) - close (fd); - } + full_exec_path = exec_file_find (exec_file, NULL); if (full_exec_path == NULL) { diff --git a/gdb/infrun.c b/gdb/infrun.c index f09e2daa945..a4f0b9f02e3 100644 --- a/gdb/infrun.c +++ b/gdb/infrun.c @@ -1136,12 +1136,7 @@ follow_exec (ptid_t ptid, char *execd_pathname) if (gdb_sysroot != NULL && *gdb_sysroot != '\0') { - int fd = -1; - char *name; - - name = exec_file_find (execd_pathname, &fd); - if (fd >= 0) - close (fd); + char *name = exec_file_find (execd_pathname, NULL); execd_pathname = alloca (strlen (name) + 1); strcpy (execd_pathname, name); diff --git a/gdb/solib.c b/gdb/solib.c index 2466235678e..358a0a263cb 100644 --- a/gdb/solib.c +++ b/gdb/solib.c @@ -114,8 +114,9 @@ show_solib_search_path (struct ui_file *file, int from_tty, /* Return the full pathname of a binary file (the main executable or a shared library file), or NULL if not found. The returned - pathname is malloc'ed and must be freed by the caller. *FD is - set to either -1 or an open file handle for the binary file. + pathname is malloc'ed and must be freed by the caller. If FD + is non-NULL, *FD is set to either -1 or an open file handle for + the binary file. Global variable GDB_SYSROOT is used as a prefix directory to search for binary files if they have an absolute path. @@ -254,7 +255,8 @@ solib_find_1 (char *in_pathname, int *fd, int is_solib) /* Handle files to be accessed via the target. */ if (is_target_filename (temp_pathname)) { - *fd = -1; + if (fd != NULL) + *fd = -1; do_cleanups (old_chain); return temp_pathname; } @@ -367,14 +369,21 @@ solib_find_1 (char *in_pathname, int *fd, int is_solib) OPF_TRY_CWD_FIRST | OPF_RETURN_REALPATH, in_pathname, O_RDONLY | O_BINARY, &temp_pathname); - *fd = found_file; + if (fd == NULL) + { + if (found_file >= 0) + close (found_file); + } + else + *fd = found_file; + return temp_pathname; } /* Return the full pathname of the main executable, or NULL if not found. The returned pathname is malloc'ed and must be freed by - the caller. *FD is set to either -1 or an open file handle for - the main executable. + the caller. If FD is non-NULL, *FD is set to either -1 or an open + file handle for the main executable. The search algorithm used is described in solib_find_1's comment above. */ @@ -405,8 +414,8 @@ exec_file_find (char *in_pathname, int *fd) /* Return the full pathname of a shared library file, or NULL if not found. The returned pathname is malloc'ed and must be freed by - the caller. *FD is set to either -1 or an open file handle for - the shared library. + the caller. If FD is non-NULL, *FD is set to either -1 or an open + file handle for the shared library. The search algorithm used is described in solib_find_1's comment above. */ |