9.1113 utimensat

This function is missing on some platforms:
glibc 2.3.6, Mac OS X 10.5, FreeBSD 6.0, NetBSD 5.0, OpenBSD 3.8, Minix 3.1.8,
AIX 5.1, HP-UX 11, IRIX 6.5, OSF/1 5.1, Solaris 10, Cygwin 1.5.x, mingw, MSVC 9,
Interix 3.5, BeOS.
However, the replacement function may end up truncating timestamps to
less resolution than supported by the file system. Furthermore, the
replacement function is not safe to be used in libraries and is not
multithread-safe.

This function returns a bogus value instead of failing with
ENOSYS on some platforms:
Linux kernel 2.6.21.

This function fails with ENOSYS if passed the flag
AT_SYMLINK_NOFOLLOW on a regular file:
Linux kernel 2.6.22.

When using UTIME_OMIT or UTIME_NOW, some systems require
the tv_sec argument to be 0, and don’t necessarily handle all
file permissions in the manner required by POSIX:
Linux kernel 2.6.25.

When using UTIME_OMIT for the modification time, but specifying
an access time, some systems fail to update the change time:
Linux kernel 2.6.32, Solaris 11.1.

Out-of-range values of tv_nsec do not lead to a failure on some
platforms:
Linux kernel 2.6.22.19 on hppa.

Portability problems not fixed by Gnulib:

On some platforms, timestamps of symbolic links cannot be modified, so
the replacement fails with ENOSYS if passed the flag
AT_SYMLINK_NOFOLLOW on a symlink.

The mere act of using lstat modifies the access time of
symlinks on some platforms, so utimensat with
AT_SYMLINK_NOFOLLOW can only effectively change modification time:
Cygwin.

The mere act of using stat modifies the access time of
directories on some platforms, so utimensat can only
effectively change directory modification time:
Cygwin 1.5.x.