diff options
-rw-r--r-- | gdb/ChangeLog | 5 | ||||
-rw-r--r-- | gdb/source.c | 7 |
2 files changed, 12 insertions, 0 deletions
diff --git a/gdb/ChangeLog b/gdb/ChangeLog index 6c81a9f..0e40c7e 100644 --- a/gdb/ChangeLog +++ b/gdb/ChangeLog @@ -1,5 +1,10 @@ 2015-10-27 Pedro Alves <palves@redhat.com> + * source.c (openp): New local 'last_errno'. Use it to + save/restore errno. + +2015-10-27 Pedro Alves <palves@redhat.com> + * psymtab.c (dump_psymtab_addrmap_1): Add casts. 2015-10-27 Simon Marchi <simon.marchi@polymtl.ca> diff --git a/gdb/source.c b/gdb/source.c index 3e5e15c..194b044 100644 --- a/gdb/source.c +++ b/gdb/source.c @@ -746,6 +746,9 @@ openp (const char *path, int opts, const char *string, struct cleanup *back_to; int ix; char *dir; + /* The errno set for the last name we tried to open (and + failed). */ + int last_errno = 0; /* The open syscall MODE parameter is not specified. */ gdb_assert ((mode & O_CREAT) == 0); @@ -786,6 +789,7 @@ openp (const char *path, int opts, const char *string, filename = NULL; fd = -1; } + last_errno = errno; if (!(opts & OPF_SEARCH_IN_PATH)) for (i = 0; string[i]; i++) @@ -808,6 +812,7 @@ openp (const char *path, int opts, const char *string, alloclen = strlen (path) + strlen (string) + 2; filename = (char *) alloca (alloclen); fd = -1; + last_errno = ENOENT; dir_vec = dirnames_to_char_ptr_vec (path); back_to = make_cleanup_free_char_ptr_vec (dir_vec); @@ -878,6 +883,7 @@ openp (const char *path, int opts, const char *string, fd = gdb_open_cloexec (filename, mode, 0); if (fd >= 0) break; + last_errno = errno; } } @@ -895,6 +901,7 @@ done: *filename_opened = gdb_abspath (filename); } + errno = last_errno; return fd; } |