Mercurial > hg > octave-lyh > gnulib-hg
changeset 12167:c314d472dca7
test-stat-time: port to mingw
Newer mingw has usleep, but it rejects arguments over 1000000
without sleeping. And since stat has no visibility into
sub-second resolutions, it meant all the timestamps ended up
identical. Fixed by restoring the 8 seconds of sleep, as
well as working around the documented unlink issue.
* tests/test-stat-time.c (force_unlink): Return a value.
(test_ctime) [W32]: Fix compilation error.
(nap): Don't call usleep with too large an argument. Use
force_unlink.
* doc/pastposix-functions/usleep.texi (usleep): Document the
portability issue.
Signed-off-by: Eric Blake <ebb9@byu.net>
author | Eric Blake <ebb9@byu.net> |
---|---|
date | Tue, 13 Oct 2009 09:16:16 -0600 |
parents | d943ffe46edc |
children | 7ea363404f65 |
files | ChangeLog doc/pastposix-functions/usleep.texi tests/test-stat-time.c |
diffstat | 3 files changed, 27 insertions(+), 9 deletions(-) [+] |
line wrap: on
line diff
--- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,13 @@ +2009-10-14 Eric Blake <ebb9@byu.net> + + test-stat-time: port to mingw + * tests/test-stat-time.c (force_unlink): Return a value. + (test_ctime) [W32]: Fix compilation error. + (nap): Don't call usleep with too large an argument. Use + force_unlink. + * doc/pastposix-functions/usleep.texi (usleep): Document the + portability issue. + 2009-10-13 Jim Meyering <meyering@redhat.com> use AC_CHECK_FUNCS_ONCE, not AC_CHECK_FUNCS in modules/*
--- a/doc/pastposix-functions/usleep.texi +++ b/doc/pastposix-functions/usleep.texi @@ -14,9 +14,13 @@ @itemize @item This function is missing on some platforms: -IRIX 5.3, Solaris 2.4, mingw, BeOS. +IRIX 5.3, Solaris 2.4, older mingw, BeOS. @item According to POSIX, the @code{usleep} function may interfere with the program's use of the @code{SIGALRM} signal. On Linux, it doesn't; on other platforms, it may. +@item +On some systems, @code{usleep} rejects attempts to sleep longer than 1 +second, as allowed by POSIX: +mingw. @end itemize
--- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -41,13 +41,13 @@ enum { NFILES = 4 }; -static void +static int force_unlink (const char *filename) { /* This chmod is necessary on mingw, where unlink() of a read-only file fails with EPERM. */ chmod (filename, 0600); - unlink (filename); + return unlink (filename); } static void @@ -110,11 +110,12 @@ differ, repeat the test one more time (in case we crossed a quantization boundary on a file system with 1 second resolution). If we can't observe a difference in only the - nanoseconds, then fall back to 2 seconds. */ + nanoseconds, then fall back to 2 seconds. However, note that + usleep (2000000) is allowed to fail with EINVAL. */ struct stat st1; struct stat st2; ASSERT (stat ("t-stt-stamp1", &st1) == 0); - ASSERT (unlink ("t-stt-stamp1") == 0); + ASSERT (force_unlink ("t-stt-stamp1") == 0); delay = 15000; usleep (delay); create_file ("t-stt-stamp1"); @@ -123,7 +124,7 @@ { /* Seconds differ, give it one more shot. */ st1 = st2; - ASSERT (unlink ("t-stt-stamp1") == 0); + ASSERT (force_unlink ("t-stt-stamp1") == 0); usleep (delay); create_file ("t-stt-stamp1"); ASSERT (stat ("t-stt-stamp1", &st2) == 0); @@ -132,7 +133,10 @@ && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2))) delay = 2000000; } - usleep (delay); + if (delay == 2000000) + sleep (2); + else + usleep (delay); #endif /* HAVE_USLEEP */ } @@ -204,7 +208,7 @@ 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) +# define test_ctime(ignored) ((void) 0) #else static void test_ctime (const struct stat *statinfo) @@ -229,7 +233,7 @@ { int i; - /* Collect the birth times.. */ + /* Collect the birth times. */ for (i = 0; i < NFILES; ++i) { birthtimes[i] = get_stat_birthtime (&statinfo[i]);