utimens: remove invalid futimesat call
authorJim Meyering <meyering@redhat.com>
Sun, 8 Nov 2009 11:09:35 +0000 (12:09 +0100)
committerIan Beckwith <ianb@erislabs.net>
Sun, 15 Nov 2009 02:43:04 +0000 (02:43 +0000)
* lib/utimens.c (fdutimens) [HAVE_FUTIMESAT]: Remove invalid futimesat
call.  It used the file descriptor of the target file as the DIR_FD
parameter and NULL as the file name.  That caused failure with
errno == EFAULT on FreeBSD-8.0-rc2.
(cherry picked from commit 26c5fd742f9136e2ddbd4695a9172c3fa30ea260)

ChangeLog
lib/utimens.c

index c9d05ad..4c29111 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,11 @@
+2009-11-08  Jim Meyering  <meyering@redhat.com>
+
+       utimens: remove invalid futimesat call
+       * lib/utimens.c (fdutimens): Remove invalid futimesat call.
+       It used the file descriptor of the target file as the DIR_FD
+       parameter and NULL as the file name.  That caused failure with
+       errno == EFAULT on FreeBSD-8.0-rc2
+
 2009-11-07  Eric Blake  <ebb9@byu.net>
 
        fflush, freadseek: use fseeko, not fseek
index ce759a1..bd482d7 100644 (file)
@@ -280,9 +280,9 @@ fdutimens (char const *file, int fd, struct timespec const timespec[2])
       }
     else
       {
-        /* If futimesat or futimes fails here, don't try to speed things
-           up by returning right away.  glibc can incorrectly fail with
-           errno == ENOENT if /proc isn't mounted.  Also, Mandrake 10.0
+        /* If futimesat (above) or futimes fails here, don't try to speed
+           things up by returning right away.  glibc can incorrectly fail
+           with errno == ENOENT if /proc isn't mounted.  Also, Mandrake 10.0
            in high security mode doesn't allow ordinary users to read
            /proc/self, so glibc incorrectly fails with errno == EACCES.
            If errno == EIO, EPERM, or EROFS, it's probably safe to fail
@@ -290,10 +290,7 @@ fdutimens (char const *file, int fd, struct timespec const timespec[2])
            worth optimizing, and who knows what other messed-up systems
            are out there?  So play it safe and fall back on the code
            below.  */
-# if HAVE_FUTIMESAT
-        if (futimesat (fd, NULL, t) == 0)
-          return 0;
-# elif HAVE_FUTIMES
+# if HAVE_FUTIMES
         if (futimes (fd, t) == 0)
           return 0;
 # endif