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/solib.c | |
parent | a93d5cb1976818c8d34133fd8798b3df76269f80 (diff) | |
download | gdb-998d2a3ef31378d3d980972dc68f4926b720a7e9.zip gdb-998d2a3ef31378d3d980972dc68f4926b720a7e9.tar.gz gdb-998d2a3ef31378d3d980972dc68f4926b720a7e9.tar.bz2 |
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/solib.c')
-rw-r--r-- | gdb/solib.c | 25 |
1 files changed, 17 insertions, 8 deletions
diff --git a/gdb/solib.c b/gdb/solib.c index 2466235..358a0a2 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. */ |