X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-stat-time.c;h=ac86945249cac8f3e99e039777597ffee57d2ff3;hb=b6dfa79ff86b50398ad397c4c43954d005866ce9;hp=31cd4eaf575a18abc30ac755df21d5f2ed885250;hpb=57fdfd3f8ec62b105c53bcdf6f127c35c7fe7391;p=gnulib.git diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index 31cd4eaf5..ac8694524 100644 --- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -1,5 +1,5 @@ /* Test of . - Copyright (C) 2007 Free Software Foundation, Inc. + Copyright (C) 2007-2008 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -33,6 +33,7 @@ if (!(expr)) \ { \ fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ abort (); \ } \ } \ @@ -41,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); @@ -116,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) */ @@ -129,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) */ } @@ -175,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);