Mercurial > hg > octave-shane > gnulib-hg
changeset 14890:b3af6c2a46e4
stat-time: get_stat_birthtime failure is better-defined
* lib/stat-time.h (get_stat_birthtime): If the time is not available,
return a timestamp whose tv_sec and tv_nsec values are both -1.
Previously, the spec said only that the tv_nsec value was negative.
This upward-compatible change simplifies GNU tar a bit.
author | Paul Eggert <eggert@cs.ucla.edu> |
---|---|
date | Tue, 07 Jun 2011 16:01:33 -0700 |
parents | a78ddb38a66b |
children | e12d3081aeca |
files | ChangeLog lib/stat-time.h |
diffstat | 2 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,11 @@ +2011-06-07 Paul Eggert <eggert@cs.ucla.edu> + + stat-time: get_stat_birthtime failure is better-defined + * lib/stat-time.h (get_stat_birthtime): If the time is not available, + return a timestamp whose tv_sec and tv_nsec values are both -1. + Previously, the spec said only that the tv_nsec value was negative. + This upward-compatible change simplifies GNU tar a bit. + 2011-06-07 Eric Blake <eblake@redhat.com> strerror_r-posix: work around cygwin 1.7.9
--- a/lib/stat-time.h +++ b/lib/stat-time.h @@ -142,7 +142,7 @@ } /* Return *ST's birth time, if available; otherwise return a value - with negative tv_nsec. */ + with tv_sec and tv_nsec both equal to -1. */ static inline struct timespec get_stat_birthtime (struct stat const *st) { @@ -161,7 +161,7 @@ t.tv_sec = st->st_ctime; t.tv_nsec = 0; #else - /* Birth time is not supported. Set tv_sec to avoid undefined behavior. */ + /* Birth time is not supported. */ t.tv_sec = -1; t.tv_nsec = -1; /* Avoid a "parameter unused" warning. */ @@ -175,10 +175,12 @@ using zero. Attempt to work around this problem. Alas, this can report failure even for valid time stamps. Also, NetBSD sometimes returns junk in the birth time fields; work around this - bug if it is detected. There's no need to detect negative - tv_nsec junk as negative tv_nsec already indicates an error. */ - if (t.tv_sec == 0 || 1000000000 <= t.tv_nsec) - t.tv_nsec = -1; + bug if it is detected. */ + if (! (t.tv_sec && 0 <= t.tv_nsec && t.tv_nsec < 1000000000)) + { + t.tv_sec = -1; + t.tv_nsec = -1; + } #endif return t;