summaryrefslogtreecommitdiff
path: root/lib/utimens.c
diff options
context:
space:
mode:
authorPaul Eggert <eggert@cs.ucla.edu>2005-01-03 08:51:59 +0000
committerPaul Eggert <eggert@cs.ucla.edu>2005-01-03 08:51:59 +0000
commite75249bf8cb62b62593474e6b654e75ad7ee2468 (patch)
tree0d2fe94a3c48bc9f69d14ef2d472dff57f602588 /lib/utimens.c
parenta672333a19f3d3ee4865750db6c211add0184eb2 (diff)
downloadcoreutils-e75249bf8cb62b62593474e6b654e75ad7ee2468.tar.xz
futimens) [HAVE_FUTIMES]: Fall back on utimes if futimes fails with
errno == ENOENT.
Diffstat (limited to 'lib/utimens.c')
-rw-r--r--lib/utimens.c15
1 files changed, 13 insertions, 2 deletions
diff --git a/lib/utimens.c b/lib/utimens.c
index ad5d8fb1a..4a9c9c6c4 100644
--- a/lib/utimens.c
+++ b/lib/utimens.c
@@ -1,4 +1,4 @@
-/* Copyright (C) 2003, 2004 Free Software Foundation, Inc.
+/* Copyright (C) 2003, 2004, 2005 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 the
@@ -24,6 +24,8 @@
#include "utimens.h"
+#include <errno.h>
+
#if HAVE_UTIME_H
# include <utime.h>
#endif
@@ -74,7 +76,16 @@ futimens (int fd ATTRIBUTE_UNUSED,
t = NULL;
# if HAVE_FUTIMES
if (0 <= fd)
- return futimes (fd, t);
+ {
+ 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 in this case. */
+ if (errno != ENOENT)
+ return -1;
+ }
# endif
return utimes (file, t);