+2008-04-27 Bruno Haible <bruno@clisp.org>
+
+ * 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 <bruno@clisp.org>
* lib/rpmatch.c (rpmatch): Add some comments.
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);
/* 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) */
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) */
}
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);