sys_stat: guarantee struct timespec
[gnulib.git] / ChangeLog
index 47a6e83..1768d74 100644 (file)
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,3 +1,113 @@
+2009-10-12  Eric Blake  <ebb9@byu.net>
+
+       sys_stat: guarantee struct timespec
+       * lib/sys_stat.in.h (includes): Always include <time.h>
+       * modules/sys_stat (Depends-on): Add time.
+       * tests/test-sys_stat.c: Guarantee struct timespec, as well as
+       mode_t permission values.
+       * doc/posix-headers/sys_stat.texi (sys/stat.h): Document how to
+       get at subsecond timestamps.
+
+2009-10-10  Eric Blake  <ebb9@byu.net>
+
+       futimens: new module
+       * modules/futimens: New file.
+       * lib/futimens.c (futimens): Likewise.
+       * m4/futimens.m4 (gl_FUNC_FUTIMENS): Likewise.
+       * lib/utimens.c (futimens): Avoid recursion into rpl_futimens, so
+       we can work around Linux bugs.
+       * m4/sys_stat_h.m4 (gl_SYS_STAT_H_DEFAULTS): Add witnesses.
+       * modules/sys_stat (Makefile.am): Substitute them.
+       * lib/sys_stat.in.h (futimens): Declare it.
+       * MODULES.html.sh (systems lacking POSIX:2008): Mention module.
+       * doc/posix-functions/futimens.texi (futimens): Likewise.
+       * modules/futimens-tests: New test.
+       * tests/test-futimens.c: Likewise.
+
+       utimens: introduce fdutimens
+       * lib/utimens.h (fdutimens): New prototype.
+       * lib/utimens.c (gl_futimens): Move guts...
+       (fdutimens): ...to new interface.
+       * tests/test-utimens.c (do_fdutimens): Use it.
+
+       utimens: add UTIME_NOW and UTIME_OMIT support
+       * lib/utimens.c (validate_timespec, update_timespec): New helper
+       functions.
+       (gl_futimens, lutimens): Use them.
+       * modules/utimens (Depends-on): Add gettime, lstat, stat-time,
+       stdbool, sys_stat.
+       (Link): Mention resulting library dependency.
+       * modules/utimecmp (Link): Likewise.
+       * modules/utimens-tests (Depends-on): Drop stat-time, stdbool.
+       (Makefile.am): Pick up library dependency.
+       * lib/sys_stat.in.h (UTIME_NOW, UTIME_OMIT): Guarantee a
+       definition.
+       * tests/test-sys_stat.c: Test the definitions.
+       * doc/posix-headers/sys_stat.texi (sys/stat.h): Document this.
+       * NEWS: Document library dependency.
+
+       utimecmp: support symlink timestamps
+       * lib/utimecmp.c (utimecmp): Use new interface.  Skip effort of
+       hashing when possible.  Use pathconf when available.
+       (SYSCALL_RESOLUTION): Recognize tighter resolution.
+       * modules/utimecmp (Depends-on): Add lstat.
+
+       utimens: add lutimens interface
+       * lib/utimens.c (lutimens): New function.
+       * m4/utimens.m4 (gl_UTIMENS): Check for lutimes.
+       * lib/utimens.h (lutimens): Declare new interface.
+       * tests/test-utimens.c (main): Enhance test.
+       * tests/test-lutimens.h (test_lutimens): New file.
+       * modules/utimens-tests (Files): Distribute it.
+       (Depends-on): Add symlink.
+       (configure.ac): Check for usleep.
+
+       utimens: validate futimens usage
+       * lib/utimens.c (gl_futimens): Require valid fd up front, using
+       fewer syscalls on failure later on.  Avoid compiler warning on
+       mingw.
+       * modules/utimens (Depends-on): Add dup2.
+
+       utimens: add test
+       * modules/utimens-tests: New test.
+       * tests/test-utimens.h: New file.
+       * tests/test-futimens.h: Likewise.
+       * tests/test-utimens.c: Likewise.
+
+       doc: mention timestamp portability issues
+       * doc/glibc-functions/lutimes.texi (lutimes): Refer to utimensat
+       instead.
+       * doc/posix-functions/utime.texi (utime): Likewise.
+       * doc/posix-functions/utimes.texi (utimes): Likewise.
+       * doc/glibc-functions/futimes.texi (futimes): Refer to futimens
+       instead.
+       * doc/posix-functions/futimens.texi (futimens): Mention utimens
+       module.
+       * doc/posix-functions/utimensat.texi (utimensat): Likewise.
+       Mention weakness with symlink timestamps.
+       * doc/glibc-functions/futimesat.texi (futimesat): New file; refer
+       to utimensat/futimens instead.
+       * doc/gnulib.texi (Glibc sys/time.h): Include new file.
+
+       test-dup2: enhance test
+       * tests/test-dup2.c (main): Also check AT_FDCWD.
+
+       test-stat-time: avoid more spurious failures
+       * tests/test-stat-time.c (nap): Wait for 15ms rather than 2ms, for
+       xfs; and avoid race if the two timestamps cross quantization edge.
+
+       relocatable: prefer 'file system' over 'filesystem'
+       * m4/relocatable-lib.m4 (gl_RELOCATABLE_NOP): Use AS_HELP_STRING.
+       (gl_RELOCATABLE_LIBRARY_BODY): Fix spelling.
+       * doc/relocatable-maint.texi (Supporting Relocation): Likewise.
+       * doc/relocatable.texi (Enabling Relocatability): Likewise.
+       * lib/relocatable.c (compute_curr_prefix): Likewise.
+
+2009-10-10  Jim Meyering  <meyering@redhat.com>
+
+       stat-time-tests: check for the usleep function
+       * modules/stat-time-tests (configure.ac): Now that we test HAVE_USLEEP.
+
 2009-10-10  Bruno Haible  <bruno@clisp.org>
 
        * modules/xnanosleep: Put the Link section after the Include section.
 2009-10-04  Paolo Bonzini  <bonzini@gnu.org>
            Bruno Haible  <bruno@clisp.org>
 
-       * lib/uname.c (uname): Use a table-driver algorithm to compute
+       * lib/uname.c (uname): Use a table-driven algorithm to compute
        Windows NT versions.
 
 2009-10-04  Bruno Haible  <bruno@clisp.org>