X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsavewd.c;h=9af3085c977bc23c74e0e097652e4ada6aec179e;hb=a9e638f0e4d6928c12f2b374bc369bb1ecf2cdfe;hp=7e992376ff36af9b9268f4bf80cedebd4c6fd92b;hpb=07f694e74267c3d552397068d1300ce9b492d93a;p=gnulib.git diff --git a/lib/savewd.c b/lib/savewd.c index 7e992376f..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 @@ -25,12 +25,13 @@ #include #include #include +#include #include +#include #include #include #include -#include "exit.h" #include "dirname.h" #include "fcntl-safer.h" @@ -53,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; @@ -102,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