summaryrefslogtreecommitdiff
path: root/lib/utimens.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2005-10-30 21:32:02 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2005-10-30 21:32:02 +0000
commit9fb982e15023255bcdd915a16054a5ec96a669c7 (patch)
tree79d02a255824ae14ae8778e856da2dfe3f3e236c /lib/utimens.c
parentb90c07efd8332e5884900dacc7f34a8d4eb27bfb (diff)
downloadcoreutils-9fb982e15023255bcdd915a16054a5ec96a669c7.tar.xz
(futimens) [HAVE_WORKING_UTIMES && HAVE_FUTIMES]:
Don't assume that futimes failing means we must fail.
Diffstat (limited to 'lib/utimens.c')
-rw-r--r--lib/utimens.c20
1 files changed, 9 insertions, 11 deletions
diff --git a/lib/utimens.c b/lib/utimens.c
index 7f88f2fa9..8d8bef468 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -99,17 +99,15 @@ futimens (int fd ATTRIBUTE_UNUSED,
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