Mercurial > hg > octave-lojdl > gnulib-hg
changeset 12147:a620bedbe958
test-stat-time: port to buggy NFS clients
On darwin, the NFS client reports mtime with st_sec==INT_MAX and
st_nsec monotonically increasing per transaction until the next
sync(); but sync() is expensive, so it is easier to just skip
this part of the test if mtime is nowhere near ctime.
* tests/test-stat-time.c (main) [W32]: Reduce ifdefs.
(test_ctime): Also skip test if mtime and ctime are skewed.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Fri, 09 Oct 2009 21:09:38 -0600 |
parents | e076a06bae48 |
children | 3c9981d0d9c3 |
files | ChangeLog tests/test-stat-time.c |
diffstat | 2 files changed, 16 insertions(+), 6 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,9 @@ 2009-10-09 Eric Blake <ebb9@byu.net> + test-stat-time: port to buggy NFS clients + * tests/test-stat-time.c (main) [W32]: Reduce ifdefs. + (test_ctime): Also skip test if mtime and ctime are skewed. + maint: prefer 'file system' over 'filesystem' * doc/posix-functions/fstatat.texi (fstatat): Likewise. * doc/posix-functions/lstat.texi (lstat): Likewise.
--- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -186,10 +186,21 @@ } } -#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) +#if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__ +/* Skip the ctime tests on native Windows platforms, because their + st_ctime is either the same as st_mtime (plus or minus an offset) + or set to the file _creation_ time, and is not influenced by rename + or chmod. */ +# define test_ctime ((void) 0) +#else static void test_ctime (const struct stat *statinfo) { + /* On some buggy NFS clients, mtime and ctime are disproportionately + skewed from one another. Skip this test in that case. */ + if (statinfo[0].st_mtime != statinfo[0].st_ctime) + return; + /* mtime(stamp2) < ctime(renamed) */ ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime || (statinfo[2].st_mtime == statinfo[1].st_ctime @@ -246,12 +257,7 @@ cleanup (0); prepare_test (statinfo, modtimes); test_mtime (statinfo, modtimes); - /* Skip the ctime tests on native Windows platforms, because there st_ctime - is either the same as st_mtime (plus or minus an offset) or set to the - file _creation_ time, and is not influenced by rename or chmod. */ -#if !((defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__) test_ctime (statinfo); -#endif test_birthtime (statinfo, modtimes, birthtimes); cleanup (0);