/* Set file access and modification times.
- Copyright (C) 2003-2010 Free Software Foundation, Inc.
+ Copyright (C) 2003-2012 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
if (adjustment_needed < 0)
return -1;
- /* Require that at least one of FD or FILE are valid. Works around
+ /* Require that at least one of FD or FILE are potentially valid, to avoid
a Linux bug where futimens (AT_FDCWD, NULL) changes "." rather
than failing. */
- if (!file)
+ if (fd < 0 && !file)
{
- if (fd < 0)
- {
- errno = EBADF;
- return -1;
- }
- if (dup2 (fd, fd) != fd)
- return -1;
+ errno = EBADF;
+ return -1;
}
/* Some Linux-based NFS clients are buggy, and mishandle time stamps
# endif
if (futimes (fd, t) == 0)
{
-# if __linux__ && __GLIBC__ && ! HAVE_WORKING_UTIMES
+# if __linux__ && __GLIBC__
/* Work around a longstanding glibc bug, still present as
of 2010-12-27. On older Linux kernels that lack both
utimensat and utimes, glibc's futimes rounds instead of