Package: libc0.3 Version: 2.19-11 Severity: normal The futimens patch for the Hurd does not support UTIME_NOW or UTIME_OMIT. POSIX says:
"If the tv_nsec field of a timespec structure has the special value UTIME_NOW, the file's relevant timestamp shall be set to the greatest value supported by the file system that is not greater than the current time. If the tv_nsec field has the special value UTIME_OMIT, the file's relevant timestamp shall not be changed. In either case, the tv_sec field shall be ignored." This is the cause of the current man-db build failure: https://buildd.debian.org/status/fetch.php?pkg=man-db&arch=hurd-i386&ver=2.7.0.1-1&stamp=1411530073 Gnulib defines UTIME_NOW to (-1) if it is not defined by the system. But, since futimens doesn't specifically support it, setting the mtime to {0, UTIME_NOW} just results in a timestamp one nanosecond less than the epoch, which is not very useful. The attached test program, when run with a file name argument, should result in a file whose modification time is set to the current time. I'll see if I can modify Gnulib or failing that man-db to work around this, but of course it would be better for futimens to be fixed. Thanks, -- Colin Watson [cjwat...@debian.org]
#include <sys/types.h> #include <sys/stat.h> #include <fcntl.h> #include <stdio.h> #include <stdlib.h> #include <unistd.h> #define MUST(name, cond) \ do { \ if (!(cond)) { \ fprintf (stderr, name " failed\n"); \ abort (); \ } \ } while (0) int main (int argc, char **argv) { int fd; struct timespec times[2]; if (argc < 2) { fprintf (stderr, "need file name\n"); exit (2); } fd = open (argv[1], O_RDWR | O_CREAT | O_TRUNC, 0666); MUST ("open", fd >= 0); times[0].tv_sec = 0; times[0].tv_nsec = UTIME_NOW; times[1].tv_sec = 0; times[1].tv_nsec = UTIME_NOW; MUST ("futimens", futimens (fd, times) == 0); MUST ("close", close (fd) == 0); return 0; }