From 9a665936ac25943102a1f2447c5b2c74a03b5524 Mon Sep 17 00:00:00 2001 From: Bruno Haible Date: Mon, 28 Apr 2008 00:12:56 +0200 Subject: [PATCH] Make test-stat-time pass on mingw. --- ChangeLog | 9 +++++++++ modules/stat-time-tests | 1 + tests/test-stat-time.c | 32 ++++++++++++++++++++++++++------ 3 files changed, 36 insertions(+), 6 deletions(-) diff --git a/ChangeLog b/ChangeLog index dfd8ca3ad..5be5a2646 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,14 @@ 2008-04-27 Bruno Haible + * modules/stat-time-tests (Depends-on): Add sleep. + * tests/test-stat-time.c (force_unlink): New function. + (cleanup): Use it. + (test_mtime): Remove the ctime related tests. + (test_ctime): New function, containing the ctime related tests. + (main): Call test_ctime, except on native Windows platforms. + +2008-04-27 Bruno Haible + * lib/rpmatch.c (rpmatch): Add some comments. Reported by James Youngman . diff --git a/modules/stat-time-tests b/modules/stat-time-tests index 8c6147bb9..d4f6041a2 100644 --- a/modules/stat-time-tests +++ b/modules/stat-time-tests @@ -3,6 +3,7 @@ tests/test-stat-time.c Depends-on: time +sleep configure.ac: diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index 028953178..ac8694524 100644 --- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -42,14 +42,23 @@ enum { NFILES = 4 }; static void +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); +} + +static void cleanup (int sig) { /* Remove temporary files. */ - unlink ("t-stt-stamp1"); - unlink ("t-stt-testfile"); - unlink ("t-stt-stamp2"); - unlink ("t-stt-renamed"); - unlink ("t-stt-stamp3"); + force_unlink ("t-stt-stamp1"); + force_unlink ("t-stt-testfile"); + force_unlink ("t-stt-stamp2"); + force_unlink ("t-stt-renamed"); + force_unlink ("t-stt-stamp3"); if (sig != 0) _exit (1); @@ -117,7 +126,6 @@ test_mtime (const struct stat *statinfo, struct timespec *modtimes) /* Use the struct stat fields directly. */ ASSERT (statinfo[0].st_mtime < statinfo[2].st_mtime); /* mtime(stamp1) < mtime(stamp2) */ ASSERT (statinfo[2].st_mtime < statinfo[3].st_mtime); /* mtime(stamp2) < mtime(stamp3) */ - ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime); /* mtime(stamp2) < ctime(renamed) */ /* Now check the result of the access functions. */ ASSERT (modtimes[0].tv_sec < modtimes[2].tv_sec); /* mtime(stamp1) < mtime(stamp2) */ @@ -130,6 +138,12 @@ test_mtime (const struct stat *statinfo, struct timespec *modtimes) ts = get_stat_mtime (&statinfo[i]); ASSERT (ts.tv_sec == statinfo[i].st_mtime); } +} + +static void +test_ctime (const struct stat *statinfo) +{ + ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime); /* mtime(stamp2) < ctime(renamed) */ ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime); /* mtime(stamp2) < ctime(renamed) */ } @@ -176,6 +190,12 @@ main () 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); -- 2.11.0