]> sourceware.org Git - glibc.git/blame - io/test-utime.c
Use <> for include of kernel-features.h.
[glibc.git] / io / test-utime.c
CommitLineData
95a305be 1/* Copyright (C) 1994,1996,1997,2000,2002,2003 Free Software Foundation, Inc.
c84142e8 2 This file is part of the GNU C Library.
28f540f4 3
c84142e8 4 The GNU C Library is free software; you can redistribute it and/or
41bdb6e2
AJ
5 modify it under the terms of the GNU Lesser General Public
6 License as published by the Free Software Foundation; either
7 version 2.1 of the License, or (at your option) any later version.
28f540f4 8
c84142e8
UD
9 The GNU C Library is distributed in the hope that it will be useful,
10 but WITHOUT ANY WARRANTY; without even the implied warranty of
11 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
41bdb6e2 12 Lesser General Public License for more details.
28f540f4 13
41bdb6e2
AJ
14 You should have received a copy of the GNU Lesser General Public
15 License along with the GNU C Library; if not, write to the Free
16 Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
17 02111-1307 USA. */
28f540f4 18
11336c16 19#include <fcntl.h>
28f540f4 20#include <stdio.h>
3e1f480e 21#include <stdlib.h>
28f540f4
RM
22#include <sys/stat.h>
23#include <unistd.h>
11336c16 24#include <utime.h>
274aead3 25#include <time.h>
28f540f4
RM
26
27int
cccda09f 28main (int argc, char *argv[])
28f540f4
RM
29{
30 char file[L_tmpnam];
31 struct utimbuf ut;
32 struct stat st;
274aead3
GM
33 struct stat stnow;
34 time_t now1, now2;
28f540f4
RM
35 int fd;
36
37 if (tmpnam (file) == 0)
38 {
39 perror ("tmpnam");
bf4de8f3 40 return 1;
28f540f4
RM
41 }
42
43 fd = creat (file, 0666);
44 if (fd < 0)
45 {
46 perror ("creat");
bf4de8f3 47 return 1;
28f540f4
RM
48 }
49 close (fd);
50
274aead3 51 /* Test utime with arg */
28f540f4
RM
52 ut.actime = 500000000;
53 ut.modtime = 500000001;
54 if (utime (file, &ut))
55 {
56 perror ("utime");
57 remove (file);
bf4de8f3 58 return 1;
28f540f4
RM
59 }
60
61 if (stat (file, &st))
62 {
63 perror ("stat");
64 remove (file);
bf4de8f3 65 return 1;
28f540f4
RM
66 }
67
274aead3
GM
68 /* Test utime with NULL.
69 Since there's a race condition possible here, we check
70 the time before and after the call to utime. */
71 now1 = time (NULL);
72 if (now1 == (time_t)-1)
73 {
74 perror ("time");
75 remove (file);
bf4de8f3 76 return 1;
274aead3
GM
77 }
78
dade1ade
UD
79 /* The clocks used to set the modification time and that used in the
80 time() call need not be the same. They need not have the same
81 precision. Therefore we delay the following operation by one
82 second which makes sure we can compare with second precision. */
83 sleep (1);
84
274aead3
GM
85 if (utime (file, NULL))
86 {
87 perror ("utime NULL");
88 remove (file);
bf4de8f3 89 return 1;
274aead3
GM
90 }
91
dade1ade
UD
92 sleep (1);
93
274aead3
GM
94 now2 = time (NULL);
95 if (now2 == (time_t)-1)
96 {
97 perror ("time");
98 remove (file);
bf4de8f3 99 return 1;
274aead3
GM
100 }
101
102 if (stat (file, &stnow))
103 {
104 perror ("stat");
105 remove (file);
bf4de8f3 106 return 1;
274aead3
GM
107 }
108
28f540f4
RM
109 remove (file);
110
111 if (st.st_mtime != ut.modtime)
112 {
113 printf ("modtime %ld != %ld\n", st.st_mtime, ut.modtime);
bf4de8f3 114 return 1;
28f540f4
RM
115 }
116
117 if (st.st_atime != ut.actime)
118 {
119 printf ("actime %ld != %ld\n", st.st_atime, ut.actime);
bf4de8f3 120 return 1;
28f540f4
RM
121 }
122
dade1ade 123 if (stnow.st_mtime < now1 || stnow.st_mtime > now2)
274aead3 124 {
688e7bfe 125 printf ("modtime %ld <%ld >%ld\n", stnow.st_mtime, now1, now2);
bf4de8f3 126 return 1;
274aead3
GM
127 }
128
129 if (stnow.st_atime < now1 || stnow.st_atime > now2)
130 {
688e7bfe 131 printf ("actime %ld <%ld >%ld\n", stnow.st_atime, now1, now2);
bf4de8f3 132 return 1;
274aead3
GM
133 }
134
28f540f4 135 puts ("Test succeeded.");
bf4de8f3 136 return 0;
28f540f4 137}
This page took 0.307806 seconds and 5 git commands to generate.