X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-stat-time.c;h=ac86945249cac8f3e99e039777597ffee57d2ff3;hb=bc7cb38da9d3ee6dcbf20f0dbbcf9cc6e29a04b6;hp=907ba4b9096cf8d1daca9272db2bf02b41801e1e;hpb=75d146361fe980e1e1bbb9639edc6fbed5345e82;p=gnulib.git diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index 907ba4b90..ac8694524 100644 --- a/tests/test-stat-time.c +++ b/tests/test-stat-time.c @@ -1,10 +1,10 @@ /* 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 + 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 - the Free Software Foundation; either version 2, or (at your option) - any later version. + the Free Software Foundation; either version 3 of the License, or + (at your option) any later version. This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY; without even the implied warranty of @@ -12,8 +12,7 @@ GNU General Public License for more details. You should have received a copy of the GNU General Public License - along with this program; if not, write to the Free Software Foundation, - Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. */ + along with this program. If not, see . */ /* Written by James Youngman , 2007. */ @@ -34,6 +33,7 @@ if (!(expr)) \ { \ fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ abort (); \ } \ } \ @@ -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);