X-Git-Url: http://erislabs.net/gitweb/?a=blobdiff_plain;f=tests%2Ftest-stat-time.c;h=ac86945249cac8f3e99e039777597ffee57d2ff3;hb=b015db270e6b2937105daf6f4f632cda339c95e2;hp=bf3e8dfe361840e918d8911aea9387f50ab8d76b;hpb=a03613b6836443ac6ac2fa8b2037a1b6644dcc4c;p=gnulib.git diff --git a/tests/test-stat-time.c b/tests/test-stat-time.c index bf3e8dfe3..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. */ @@ -28,19 +27,38 @@ #include #include -#define ASSERT(condition) if (!(condition)) abort () +#define ASSERT(expr) \ + do \ + { \ + if (!(expr)) \ + { \ + fprintf (stderr, "%s:%d: assertion failed\n", __FILE__, __LINE__); \ + fflush (stderr); \ + abort (); \ + } \ + } \ + while (0) 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); @@ -108,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) */ @@ -121,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) */ } @@ -167,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);