X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;ds=sidebyside;f=lib%2Fsavewd.c;h=9af3085c977bc23c74e0e097652e4ada6aec179e;hb=a9e638f0e4d6928c12f2b374bc369bb1ecf2cdfe;hp=bd3d118452ea38d2bc4c97510b6a06e4964606b0;hpb=68aa9462de8a606c435c416a2a0ef94e0f0c40b1;p=gnulib.git diff --git a/lib/savewd.c b/lib/savewd.c index bd3d11845..9af3085c9 100644 --- a/lib/savewd.c +++ b/lib/savewd.c @@ -1,6 +1,6 @@ /* Save and restore the working directory, possibly using a child process. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2007 Free Software Foundation, Inc. This program is free software; you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -27,11 +27,11 @@ #include #include #include +#include #include #include #include -#include "exit.h" #include "dirname.h" #include "fcntl-safer.h" @@ -54,7 +54,7 @@ savewd_save (struct savewd *wd) wd->val.fd = fd; break; } - if (errno != EACCES) + if (errno != EACCES && errno != ESTALE) { wd->state = ERROR_STATE; wd->val.errnum = errno; @@ -103,7 +103,8 @@ savewd_chdir (struct savewd *wd, char const *dir, int options, /* Open the directory if requested, or if avoiding a race condition is requested and possible. */ - if (open_result || (options & (O_NOFOLLOW ? SAVEWD_CHDIR_NOFOLLOW : 0))) + if (open_result + || (options & (HAVE_WORKING_O_NOFOLLOW ? SAVEWD_CHDIR_NOFOLLOW : 0))) { fd = open (dir, (O_RDONLY | O_DIRECTORY | O_NOCTTY | O_NONBLOCK