changeset 6440:d811a65bfa7a

* lib/utimens.c (futimens) [HAVE_WORKING_UTIMES && HAVE_FUTIMES]: Don't assume that futimes failing means we mustfail.
author Paul Eggert <eggert@cs.ucla.edu>
date Sun, 30 Oct 2005 21:30:15 +0000
parents 3fd547210013
children 649a703475b8
files lib/ChangeLog lib/utimens.c
diffstat 2 files changed, 15 insertions(+), 11 deletions(-) [+]
line wrap: on
line diff
--- a/lib/ChangeLog
+++ b/lib/ChangeLog
@@ -1,3 +1,9 @@
+2005-10-30  Paul Eggert  <eggert@cs.ucla.edu>
+
+	Fix porting problem reported by Theodoros V. Kalamatianos.
+	* utimens.c (futimens) [HAVE_WORKING_UTIMES && HAVE_FUTIMES]:
+	Don't assume that futimes failing means we mustfail.
+
 2005-10-29  Paul Eggert  <eggert@cs.ucla.edu>
 
 	* getcwd.c (__getcwd): Don't assume that system calls after readdir
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -99,17 +99,15 @@
       if (futimes (fd, t) == 0)
 	return 0;
 
-      /* On GNU/Linux without the futimes syscall and without /proc
-	 mounted, glibc futimes fails with errno == ENOENT.  Fall back
-	 on utimes if we get a weird error number like that.  */
-      switch (errno)
-	{
-	case EACCES:
-	case EIO:
-	case EPERM:
-	case EROFS:
-	  return -1;
-	}
+      /* Don't worry about trying to speed things up by returning right
+	 away here.  glibc futimes 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 futimes incorrectly fails with errno == EACCES.  If futimes
+	 fails with errno == EIO, EPERM, or EROFS, it's probably safe to
+	 fail right away, but these cases are rare enough that they're not
+	 worth optimizing, and who knows what other messed-up systems are
+	 out there?  So play it safe and fall back on the code below.  */
     }
 # endif
 #endif