X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Fsavewd.c;h=c4893ef6f1f877b75cae747a8222f5f21ac1a31e;hb=671c9011cb6944a63f0d15f60252c31bf0ee8e9b;hp=bd3d118452ea38d2bc4c97510b6a06e4964606b0;hpb=68aa9462de8a606c435c416a2a0ef94e0f0c40b1;p=gnulib.git diff --git a/lib/savewd.c b/lib/savewd.c index bd3d11845..c4893ef6f 100644 --- a/lib/savewd.c +++ b/lib/savewd.c @@ -1,11 +1,11 @@ /* 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 + 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 - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -13,8 +13,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* Written by Paul Eggert. */ @@ -27,14 +26,17 @@ #include #include #include +#include #include #include #include -#include "exit.h" #include "dirname.h" #include "fcntl-safer.h" +#ifndef ESTALE +# define ESTALE -1 +#endif /* Save the working directory into *WD, if it hasn't been saved already. Return true if a child has been forked to do the real @@ -54,7 +56,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 +105,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