From 998d2a3ef31378d3d980972dc68f4926b720a7e9 Mon Sep 17 00:00:00 2001 From: Gary Benson Date: Wed, 29 Apr 2015 15:20:22 +0100 Subject: 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. --- gdb/solib.c | 25 +++++++++++++++++-------- 1 file changed, 17 insertions(+), 8 deletions(-) (limited to 'gdb/solib.c') 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. */ -- cgit v1.1