diff options
Diffstat (limited to 'lib/openat.c')
-rw-r--r-- | lib/openat.c | 8 |
1 files changed, 7 insertions, 1 deletions
diff --git a/lib/openat.c b/lib/openat.c index 26e280d78..fa617b807 100644 --- a/lib/openat.c +++ b/lib/openat.c @@ -37,7 +37,11 @@ /* Replacement for Solaris' openat function. <http://www.google.com/search?q=openat+site:docs.sun.com> Simulate it by doing save_cwd/fchdir/open/restore_cwd. - If either the fchdir or the restore_cwd fails, then exit nonzero. */ + If either the save_cwd or the restore_cwd fails (relatively unlikely, + and usually indicative of a problem that deserves close attention), + then give a diagnostic and exit nonzero. + Otherwise, upon failure, set errno and return -1, as openat does. + Upon successful completion, return a file descriptor. */ int rpl_openat (int fd, char const *filename, int flags, ...) { @@ -80,6 +84,8 @@ rpl_openat (int fd, char const *filename, int flags, ...) error (exit_failure, errno, _("openat: unable to restore working directory")); + free_cwd (&saved_cwd); + errno = saved_errno; return new_fd; } |