Support for bitwise comparison of floating-point numbers.
[gnulib.git] / lib / savewd.c
index 7e99237..9af3085 100644 (file)
@@ -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
 #include <assert.h>
 #include <errno.h>
 #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"
 
@@ -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