X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Futimens.c;h=3f4d5e6164b62f29b2f36a8e00b47600de27cc0e;hb=211660469fddf64a8b0f9de2ade2aa2cdfb639fa;hp=ad5d8fb1aee9b499db6c4c2d8286d1e40c2012e0;hpb=5e594b9533e1caa633edc4ee9c6dede4e966e8d0;p=gnulib.git diff --git a/lib/utimens.c b/lib/utimens.c index ad5d8fb1a..3f4d5e616 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 @@ -12,7 +12,7 @@ You should have received a copy of the GNU General Public License along with this program; if not, write to the Free Software Foundation, - Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. */ + Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ /* Written by Paul Eggert. */ @@ -24,6 +24,8 @@ #include "utimens.h" +#include + #if HAVE_UTIME_H # include #endif @@ -74,7 +76,22 @@ 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 if we get a weird error number like that. */ + switch (errno) + { + case EACCES: + case EIO: + case EPERM: + case EROFS: + return -1; + } + } # endif return utimes (file, t);