X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=lib%2Futimens.c;h=8f4273c80876bf8216ccd77a60769948a906556d;hb=93d45a6cea3e8c0959a430e0b3f5ae24fc600399;hp=11f04d1ad8ded81b93565d87435dfebea1c566f7;hpb=6832fe5cd41b49e15107f0106e6a55ee8c90f525;p=gnulib.git diff --git a/lib/utimens.c b/lib/utimens.c index 11f04d1ad..8f4273c80 100644 --- a/lib/utimens.c +++ b/lib/utimens.c @@ -20,9 +20,7 @@ /* derived from a function in touch.c */ -#ifdef HAVE_CONFIG_H -# include -#endif +#include #include "utimens.h" @@ -54,8 +52,10 @@ struct utimbuf # endif #endif -#if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ -# define __attribute__(x) +#ifndef __attribute__ +# if __GNUC__ < 2 || (__GNUC__ == 2 && __GNUC_MINOR__ < 8) || __STRICT_ANSI__ +# define __attribute__(x) +# endif #endif #ifndef ATTRIBUTE_UNUSED @@ -76,6 +76,23 @@ int futimens (int fd ATTRIBUTE_UNUSED, char const *file, struct timespec const timespec[2]) { + /* Some Linux-based NFS clients are buggy, and mishandle time stamps + of files in NFS file systems in some cases. We have no + configure-time test for this, but please see + for references to + some of the problems with Linux 2.6.16. If this affects you, + compile with -DHAVE_BUGGY_NFS_TIME_STAMPS; this is reported to + help in some cases, albeit at a cost in performance. But you + really should upgrade your kernel to a fixed version, since the + problem affects many applications. */ + +#if HAVE_BUGGY_NFS_TIME_STAMPS + if (fd < 0) + sync (); + else + fsync (fd); +#endif + /* There's currently no interface to set file timestamps with nanosecond resolution, so do the best we can, discarding any fractional part of the timestamp. */