]> sourceware.org Git - glibc.git/blame - io/test-utime.c
x86/CET: Document glibc.tune.x86_ibt and glibc.tune.x86_shstk
[glibc.git] / io / test-utime.c
CommitLineData
688903eb 1/* Copyright (C) 1994-2018 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 14 You should have received a copy of the GNU Lesser General Public
59ba27a6
PE
15 License along with the GNU C Library; if not, see
16 <http://www.gnu.org/licenses/>. */
28f540f4 17
11336c16 18#include <fcntl.h>
ceaa9889 19#include <stdint.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 {
8d2b2763
L
113 printf ("modtime %jd != %jd\n",
114 (intmax_t) st.st_mtime, (intmax_t) ut.modtime);
bf4de8f3 115 return 1;
28f540f4
RM
116 }
117
118 if (st.st_atime != ut.actime)
119 {
8d2b2763
L
120 printf ("actime %jd != %jd\n",
121 (intmax_t) st.st_atime, (intmax_t) ut.actime);
bf4de8f3 122 return 1;
28f540f4
RM
123 }
124
dade1ade 125 if (stnow.st_mtime < now1 || stnow.st_mtime > now2)
274aead3 126 {
8d2b2763
L
127 printf ("modtime %jd <%jd >%jd\n",
128 (intmax_t) stnow.st_mtime, (intmax_t) now1, (intmax_t) now2);
bf4de8f3 129 return 1;
274aead3
GM
130 }
131
132 if (stnow.st_atime < now1 || stnow.st_atime > now2)
133 {
8d2b2763
L
134 printf ("actime %jd <%jd >%jd\n",
135 (intmax_t) stnow.st_atime, (intmax_t) now1, (intmax_t) now2);
bf4de8f3 136 return 1;
274aead3
GM
137 }
138
28f540f4 139 puts ("Test succeeded.");
bf4de8f3 140 return 0;
28f540f4 141}
This page took 0.481928 seconds and 5 git commands to generate.