I installed the following into both gnulib and coreutils, to port the utimens module to Solaris 10, which has yet another primitive for setting file time stamps (and yet another primitive that can't do it to full resolution! When will these guys learn?).
2005-09-23 Paul Eggert <[EMAIL PROTECTED]> * lib/utimens.c (futimens): Use futimesat if available. Prefer it to futimes since it doesn't have the futimes bug. * m4/utimens.m4 (gl_UTIMENS): Check for futimesat. Index: lib/utimens.c =================================================================== RCS file: /cvsroot/gnulib/gnulib/lib/utimens.c,v retrieving revision 1.4 diff -p -u -r1.4 utimens.c --- lib/utimens.c 14 May 2005 06:03:58 -0000 1.4 +++ lib/utimens.c 23 Sep 2005 19:14:59 -0000 @@ -25,6 +25,7 @@ #include "utimens.h" #include <errno.h> +#include <fcntl.h> #if HAVE_UTIME_H # include <utime.h> @@ -61,7 +62,7 @@ futimens (int fd ATTRIBUTE_UNUSED, /* 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. */ -#if HAVE_WORKING_UTIMES +#if HAVE_FUTIMESAT || HAVE_WORKING_UTIMES struct timeval timeval[2]; struct timeval const *t; if (timespec) @@ -74,7 +75,11 @@ futimens (int fd ATTRIBUTE_UNUSED, } else t = NULL; -# if HAVE_FUTIMES + +# if HAVE_FUTIMESAT + return fd < 0 ? futimesat (AT_FDCWD, file, t) : futimesat (fd, NULL, t); +# else +# if HAVE_FUTIMES if (0 <= fd) { if (futimes (fd, t) == 0) @@ -92,8 +97,9 @@ futimens (int fd ATTRIBUTE_UNUSED, return -1; } } -# endif +# endif return utimes (file, t); +# endif #else Index: m4/utimens.m4 =================================================================== RCS file: /cvsroot/gnulib/gnulib/m4/utimens.m4,v retrieving revision 1.4 diff -p -u -r1.4 utimens.m4 --- m4/utimens.m4 21 Mar 2005 22:06:27 -0000 1.4 +++ m4/utimens.m4 23 Sep 2005 19:14:59 -0000 @@ -13,5 +13,5 @@ AC_DEFUN([gl_UTIMENS], AC_REQUIRE([gl_FUNC_UTIMES]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_TIMESPEC]) AC_REQUIRE([gl_CHECK_TYPE_STRUCT_UTIMBUF]) - AC_CHECK_FUNCS_ONCE(futimes) + AC_CHECK_FUNCS_ONCE([futimes futimesat]) ]) _______________________________________________ Bug-coreutils mailing list Bug-coreutils@gnu.org http://lists.gnu.org/mailman/listinfo/bug-coreutils