+2010-10-11 Eric Blake <eblake@redhat.com>
+
+ futimens: work around Solaris 11 bug
+ * m4/futimens.m4 (gl_FUNC_FUTIMENS): Detect the bug.
+ * tests/test-futimens.h (test_futimens): Enhance, rather than
+ weaken test.
+ * doc/posix-functions/futimens.texi (futimens): Document the bug.
+
2010-10-11 Paul Eggert <eggert@cs.ucla.edu>
Indentation.
When using @code{UTIME_OMIT} for the modification time, but specifying
an access time, some systems fail to update the change time:
Linux kernel 2.6.32.
+@itme
+Passing @code{AT_FDCWD} as the fd argument does not properly fail with
+@code{EBADF} on some systems:
+glibc 2.11, Solaris 11.
@end itemize
Portability problems not fixed by Gnulib:
-# serial 4
+# serial 5
# See if we need to provide futimens replacement.
dnl Copyright (C) 2009, 2010 Free Software Foundation, Inc.
#include <fcntl.h>
#include <sys/stat.h>
#include <unistd.h>
+#include <errno.h>
]], [[struct timespec ts[2] = { { 1, UTIME_OMIT }, { 1, UTIME_NOW } };
int fd = creat ("conftest.file", 0600);
struct stat st;
if (fd < 0) return 1;
+ errno = 0;
if (futimens (AT_FDCWD, NULL) == 0) return 2;
- if (futimens (fd, ts)) return 3;
+ if (errno != EBADF) return 3;
+ if (futimens (fd, ts)) return 4;
sleep (1);
ts[0].tv_nsec = UTIME_NOW;
ts[1].tv_nsec = UTIME_OMIT;
- if (futimens (fd, ts)) return 4;
- if (fstat (fd, &st)) return 5;
- if (st.st_ctime < st.st_atime) return 6;
+ if (futimens (fd, ts)) return 5;
+ if (fstat (fd, &st)) return 6;
+ if (st.st_ctime < st.st_atime) return 7;
]])],
dnl FIXME: simplify this in 2012, when file system bugs are no longer common
[AC_COMPILE_IFELSE([AC_LANG_PROGRAM([[