/* 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
#include <fcntl.h>
#include <signal.h>
#include <stdbool.h>
+#include <stdlib.h>
#include <sys/types.h>
#include <sys/wait.h>
#include <unistd.h>
-#include "exit.h"
#include "dirname.h"
#include "fcntl-safer.h"
wd->val.fd = fd;
break;
}
- if (errno != EACCES)
+ if (errno != EACCES && errno != ESTALE)
{
wd->state = ERROR_STATE;
wd->val.errnum = errno;
/* 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