annotate tests/test-stat-time.c @ 17363:5a51fb7777a9

sys_select, sys_time: port 2013-01-30 Solaris 2.6 fix to Cygwin Problem reported by Marco Atzeri in <http://lists.gnu.org/archive/html/bug-gnulib/2013-03/msg00000.html>. * lib/sys_select.in.h [HAVE_SYS_SELECT_H && _CYGWIN_SYS_TIME_H]: Simply delegate to the system <sys/select.h> in this case too. Also, pay attention to _GL_SYS_SELECT_H_REDIRECT_FROM_SYS_TIME_H only if OSF/1, since otherwise Cygwin breaks, and it doesn't seem to be needed on Solaris either. * lib/sys_time.in.h [_CYGWIN_SYS_TIME_H]: Simply delgate to the system <sys/time.h> in this case.
author Paul Eggert <eggert@cs.ucla.edu>
date Tue, 19 Mar 2013 09:08:47 -0700
parents e542fd46ad6f
children 3c592b4deb04
Ignore whitespace changes - Everywhere: Within whitespace: At end of lines:
rev   line source
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
1 /* Test of <stat-time.h>.
17249
e542fd46ad6f maint: update all copyright year number ranges
Eric Blake <eblake@redhat.com>
parents: 16201
diff changeset
2 Copyright (C) 2007-2013 Free Software Foundation, Inc.
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
3
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
4 This program is free software: you can redistribute it and/or modify
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
5 it under the terms of the GNU General Public License as published by
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
6 the Free Software Foundation; either version 3 of the License, or
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
7 (at your option) any later version.
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
8
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
9 This program is distributed in the hope that it will be useful,
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
12 GNU General Public License for more details.
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
13
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
14 You should have received a copy of the GNU General Public License
9309
bbbbbf4cd1c5 Change copyright notice from GPLv2+ to GPLv3+.
Bruno Haible <bruno@clisp.org>
parents: 8754
diff changeset
15 along with this program. If not, see <http://www.gnu.org/licenses/>. */
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
16
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
17 /* Written by James Youngman <jay@gnu.org>, 2007. */
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
18
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
19 #include <config.h>
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
20
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
21 #include "stat-time.h"
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
22
8584
4d6fd426d412 Make it compile on AIX.
Bruno Haible <bruno@clisp.org>
parents: 8567
diff changeset
23 #include <fcntl.h>
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
24 #include <signal.h>
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
25 #include <sys/stat.h>
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
26 #include <unistd.h>
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
27
12496
a48d3d749ca5 Refactor common macros used in tests.
Bruno Haible <bruno@clisp.org>
parents: 12316
diff changeset
28 #include "macros.h"
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
29
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
30 enum { NFILES = 4 };
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
31
12167
c314d472dca7 test-stat-time: port to mingw
Eric Blake <ebb9@byu.net>
parents: 12164
diff changeset
32 static int
9990
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
33 force_unlink (const char *filename)
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
34 {
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
35 /* This chmod is necessary on mingw, where unlink() of a read-only file
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
36 fails with EPERM. */
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
37 chmod (filename, 0600);
12167
c314d472dca7 test-stat-time: port to mingw
Eric Blake <ebb9@byu.net>
parents: 12164
diff changeset
38 return unlink (filename);
9990
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
39 }
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
40
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
41 static void
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
42 cleanup (int sig)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
43 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
44 /* Remove temporary files. */
9990
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
45 force_unlink ("t-stt-stamp1");
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
46 force_unlink ("t-stt-testfile");
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
47 force_unlink ("t-stt-stamp2");
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
48 force_unlink ("t-stt-renamed");
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
49 force_unlink ("t-stt-stamp3");
8566
47ac12cd6649 Fix signal handler.
Bruno Haible <bruno@clisp.org>
parents: 8565
diff changeset
50
47ac12cd6649 Fix signal handler.
Bruno Haible <bruno@clisp.org>
parents: 8565
diff changeset
51 if (sig != 0)
47ac12cd6649 Fix signal handler.
Bruno Haible <bruno@clisp.org>
parents: 8565
diff changeset
52 _exit (1);
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
53 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
54
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
55 static int
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
56 open_file (const char *filename, int flags)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
57 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
58 int fd = open (filename, flags | O_WRONLY, 0500);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
59 if (fd >= 0)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
60 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
61 close (fd);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
62 return 1;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
63 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
64 else
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
65 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
66 return 0;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
67 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
68 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
69
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
70 static void
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
71 create_file (const char *filename)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
72 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
73 ASSERT (open_file (filename, O_CREAT | O_EXCL));
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
74 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
75
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
76 static void
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
77 do_stat (const char *filename, struct stat *p)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
78 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
79 ASSERT (stat (filename, p) == 0);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
80 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
81
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
82 /* Sleep long enough to notice a timestamp difference on the file
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
83 system in the current directory. */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
84 static void
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
85 nap (void)
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
86 {
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
87 static long delay;
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
88 if (!delay)
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
89 {
12171
47c9f1788846 test-stat-time, test-utimens: improve portability
Eric Blake <ebb9@byu.net>
parents: 12167
diff changeset
90 /* Initialize only once, by sleeping for 20 milliseconds (needed
12153
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
91 since xfs has a quantization of about 10 milliseconds, even
12171
47c9f1788846 test-stat-time, test-utimens: improve portability
Eric Blake <ebb9@byu.net>
parents: 12167
diff changeset
92 though it has a granularity of 1 nanosecond, and since NTFS
47c9f1788846 test-stat-time, test-utimens: improve portability
Eric Blake <ebb9@byu.net>
parents: 12167
diff changeset
93 has a default quantization of 15.25 milliseconds, even though
47c9f1788846 test-stat-time, test-utimens: improve portability
Eric Blake <ebb9@byu.net>
parents: 12167
diff changeset
94 it has a granularity of 100 nanoseconds). If the seconds
12153
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
95 differ, repeat the test one more time (in case we crossed a
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
96 quantization boundary on a file system with 1 second
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
97 resolution). If we can't observe a difference in only the
12316
d47887220b68 usleep: use it to simplify tests
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
98 nanoseconds, then fall back to 1 second if the time is odd,
d47887220b68 usleep: use it to simplify tests
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
99 and 2 seconds (needed for FAT) if time is even. */
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
100 struct stat st1;
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
101 struct stat st2;
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
102 ASSERT (stat ("t-stt-stamp1", &st1) == 0);
12167
c314d472dca7 test-stat-time: port to mingw
Eric Blake <ebb9@byu.net>
parents: 12164
diff changeset
103 ASSERT (force_unlink ("t-stt-stamp1") == 0);
12171
47c9f1788846 test-stat-time, test-utimens: improve portability
Eric Blake <ebb9@byu.net>
parents: 12167
diff changeset
104 delay = 20000;
12164
0f120c1de4c5 stat-time-tests: minor cleanups
Eric Blake <ebb9@byu.net>
parents: 12153
diff changeset
105 usleep (delay);
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
106 create_file ("t-stt-stamp1");
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
107 ASSERT (stat ("t-stt-stamp1", &st2) == 0);
12153
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
108 if (st1.st_mtime != st2.st_mtime)
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
109 {
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
110 /* Seconds differ, give it one more shot. */
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
111 st1 = st2;
12167
c314d472dca7 test-stat-time: port to mingw
Eric Blake <ebb9@byu.net>
parents: 12164
diff changeset
112 ASSERT (force_unlink ("t-stt-stamp1") == 0);
12153
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
113 usleep (delay);
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
114 create_file ("t-stt-stamp1");
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
115 ASSERT (stat ("t-stt-stamp1", &st2) == 0);
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
116 }
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
117 if (! (st1.st_mtime == st2.st_mtime
4443f8be082f test-stat-time: avoid more spurious failures
Eric Blake <ebb9@byu.net>
parents: 12147
diff changeset
118 && get_stat_mtime_ns (&st1) < get_stat_mtime_ns (&st2)))
12316
d47887220b68 usleep: use it to simplify tests
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
119 delay = (st1.st_mtime & 1) ? 1000000 : 2000000;
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
120 }
12316
d47887220b68 usleep: use it to simplify tests
Eric Blake <ebb9@byu.net>
parents: 12197
diff changeset
121 usleep (delay);
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
122 }
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
123
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
124 static void
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
125 prepare_test (struct stat *statinfo, struct timespec *modtimes)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
126 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
127 int i;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
128
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
129 create_file ("t-stt-stamp1");
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
130 nap ();
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
131 create_file ("t-stt-testfile");
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
132 nap ();
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
133 create_file ("t-stt-stamp2");
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
134 nap ();
8606
a83c37b17639 2007-03-30 James Youngman <jay@gnu.org>
Bruno Haible <bruno@clisp.org>
parents: 8584
diff changeset
135 ASSERT (chmod ("t-stt-testfile", 0400) == 0);
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
136 nap ();
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
137 create_file ("t-stt-stamp3");
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
138
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
139 do_stat ("t-stt-stamp1", &statinfo[0]);
8606
a83c37b17639 2007-03-30 James Youngman <jay@gnu.org>
Bruno Haible <bruno@clisp.org>
parents: 8584
diff changeset
140 do_stat ("t-stt-testfile", &statinfo[1]);
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
141 do_stat ("t-stt-stamp2", &statinfo[2]);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
142 do_stat ("t-stt-stamp3", &statinfo[3]);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
143
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
144 /* Now use our access functions. */
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
145 for (i = 0; i < NFILES; ++i)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
146 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
147 modtimes[i] = get_stat_mtime (&statinfo[i]);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
148 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
149 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
150
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
151 static void
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
152 test_mtime (const struct stat *statinfo, struct timespec *modtimes)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
153 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
154 int i;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
155
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
156 /* Use the struct stat fields directly. */
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
157 /* mtime(stamp1) < mtime(stamp2) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
158 ASSERT (statinfo[0].st_mtime < statinfo[2].st_mtime
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
159 || (statinfo[0].st_mtime == statinfo[2].st_mtime
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
160 && (get_stat_mtime_ns (&statinfo[0])
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
161 < get_stat_mtime_ns (&statinfo[2]))));
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
162 /* mtime(stamp2) < mtime(stamp3) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
163 ASSERT (statinfo[2].st_mtime < statinfo[3].st_mtime
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
164 || (statinfo[2].st_mtime == statinfo[3].st_mtime
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
165 && (get_stat_mtime_ns (&statinfo[2])
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
166 < get_stat_mtime_ns (&statinfo[3]))));
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
167
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
168 /* Now check the result of the access functions. */
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
169 /* mtime(stamp1) < mtime(stamp2) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
170 ASSERT (modtimes[0].tv_sec < modtimes[2].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
171 || (modtimes[0].tv_sec == modtimes[2].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
172 && modtimes[0].tv_nsec < modtimes[2].tv_nsec));
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
173 /* mtime(stamp2) < mtime(stamp3) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
174 ASSERT (modtimes[2].tv_sec < modtimes[3].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
175 || (modtimes[2].tv_sec == modtimes[3].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
176 && modtimes[2].tv_nsec < modtimes[3].tv_nsec));
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
177
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
178 /* verify equivalence */
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
179 for (i = 0; i < NFILES; ++i)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
180 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
181 struct timespec ts;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
182 ts = get_stat_mtime (&statinfo[i]);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
183 ASSERT (ts.tv_sec == statinfo[i].st_mtime);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
184 }
9990
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
185 }
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
186
12147
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
187 #if (defined _WIN32 || defined __WIN32__) && !defined __CYGWIN__
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
188 /* Skip the ctime tests on native Windows platforms, because their
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
189 st_ctime is either the same as st_mtime (plus or minus an offset)
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
190 or set to the file _creation_ time, and is not influenced by rename
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
191 or chmod. */
12167
c314d472dca7 test-stat-time: port to mingw
Eric Blake <ebb9@byu.net>
parents: 12164
diff changeset
192 # define test_ctime(ignored) ((void) 0)
12147
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
193 #else
9990
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
194 static void
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
195 test_ctime (const struct stat *statinfo)
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
196 {
12147
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
197 /* On some buggy NFS clients, mtime and ctime are disproportionately
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
198 skewed from one another. Skip this test in that case. */
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
199 if (statinfo[0].st_mtime != statinfo[0].st_ctime)
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
200 return;
a620bedbe958 test-stat-time: port to buggy NFS clients
Eric Blake <ebb9@byu.net>
parents: 12144
diff changeset
201
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
202 /* mtime(stamp2) < ctime(renamed) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
203 ASSERT (statinfo[2].st_mtime < statinfo[1].st_ctime
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
204 || (statinfo[2].st_mtime == statinfo[1].st_ctime
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
205 && (get_stat_mtime_ns (&statinfo[2])
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
206 < get_stat_ctime_ns (&statinfo[1]))));
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
207 }
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
208 #endif
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
209
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
210 static void
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
211 test_birthtime (const struct stat *statinfo,
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
212 const struct timespec *modtimes,
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
213 struct timespec *birthtimes)
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
214 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
215 int i;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
216
12167
c314d472dca7 test-stat-time: port to mingw
Eric Blake <ebb9@byu.net>
parents: 12164
diff changeset
217 /* Collect the birth times. */
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
218 for (i = 0; i < NFILES; ++i)
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
219 {
8567
f7fc3652bfc5 * lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents: 8566
diff changeset
220 birthtimes[i] = get_stat_birthtime (&statinfo[i]);
f7fc3652bfc5 * lib/stat-time.h (USE_BIRTHTIME): Remove.
Paul Eggert <eggert@cs.ucla.edu>
parents: 8566
diff changeset
221 if (birthtimes[i].tv_nsec < 0)
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
222 return;
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
223 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
224
12144
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
225 /* mtime(stamp1) < birthtime(renamed) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
226 ASSERT (modtimes[0].tv_sec < birthtimes[1].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
227 || (modtimes[0].tv_sec == birthtimes[1].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
228 && modtimes[0].tv_nsec < birthtimes[1].tv_nsec));
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
229 /* birthtime(renamed) < mtime(stamp2) */
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
230 ASSERT (birthtimes[1].tv_sec < modtimes[2].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
231 || (birthtimes[1].tv_sec == modtimes[2].tv_sec
a2d7efbd7d96 test-stat-time: speed up execution
Eric Blake <ebb9@byu.net>
parents: 9990
diff changeset
232 && birthtimes[1].tv_nsec < modtimes[2].tv_nsec));
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
233 }
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
234
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
235 int
12197
e45d9bb2233e tests: avoid several compiler warnings
Eric Blake <ebb9@byu.net>
parents: 12171
diff changeset
236 main (void)
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
237 {
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
238 struct stat statinfo[NFILES];
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
239 struct timespec modtimes[NFILES];
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
240 struct timespec birthtimes[NFILES];
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
241
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
242 #ifdef SIGHUP
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
243 signal (SIGHUP, cleanup);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
244 #endif
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
245 #ifdef SIGINT
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
246 signal (SIGINT, cleanup);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
247 #endif
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
248 #ifdef SIGQUIT
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
249 signal (SIGQUIT, cleanup);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
250 #endif
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
251 #ifdef SIGTERM
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
252 signal (SIGTERM, cleanup);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
253 #endif
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
254
8606
a83c37b17639 2007-03-30 James Youngman <jay@gnu.org>
Bruno Haible <bruno@clisp.org>
parents: 8584
diff changeset
255 cleanup (0);
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
256 prepare_test (statinfo, modtimes);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
257 test_mtime (statinfo, modtimes);
9990
420a1855060f Make test-stat-time pass on mingw.
Bruno Haible <bruno@clisp.org>
parents: 9889
diff changeset
258 test_ctime (statinfo);
8565
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
259 test_birthtime (statinfo, modtimes, birthtimes);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
260
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
261 cleanup (0);
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
262 return 0;
c49cf515502f 2007-03-27 Bruno Haible <bruno@clisp.org>
Bruno Haible <bruno@clisp.org>
parents:
diff changeset
263 }