diff options
author | Greg McGary <greg@mcgary.org> | 2000-08-03 20:04:31 +0000 |
---|---|---|
committer | Greg McGary <greg@mcgary.org> | 2000-08-03 20:04:31 +0000 |
commit | 274aead3955a31c8dc9da865c8b9a7345bbc0ea8 (patch) | |
tree | c2459c82e41603032b9abbed70d583b2c6cccdaa | |
parent | 0d019734966f91c3511933d207802631a7774def (diff) | |
download | glibc-274aead3955a31c8dc9da865c8b9a7345bbc0ea8.tar.gz glibc-274aead3955a31c8dc9da865c8b9a7345bbc0ea8.tar.xz glibc-274aead3955a31c8dc9da865c8b9a7345bbc0ea8.zip |
* sysdeps/unix/sysv/syscalls.list (time, utime): Correct signatures.
* io/test-utime.c: Test passing NULL as utimbuf* arg.
-rw-r--r-- | io/test-utime.c | 49 | ||||
-rw-r--r-- | sysdeps/unix/sysv/syscalls.list | 4 |
2 files changed, 51 insertions, 2 deletions
diff --git a/io/test-utime.c b/io/test-utime.c index 32e14bd161..8dbbcf990d 100644 --- a/io/test-utime.c +++ b/io/test-utime.c @@ -22,6 +22,7 @@ #include <sys/stat.h> #include <unistd.h> #include <utime.h> +#include <time.h> int main (int argc, char *argv[]) @@ -29,6 +30,8 @@ main (int argc, char *argv[]) char file[L_tmpnam]; struct utimbuf ut; struct stat st; + struct stat stnow; + time_t now1, now2; int fd; if (tmpnam (file) == 0) @@ -45,6 +48,7 @@ main (int argc, char *argv[]) } close (fd); + /* Test utime with arg */ ut.actime = 500000000; ut.modtime = 500000001; if (utime (file, &ut)) @@ -61,6 +65,39 @@ main (int argc, char *argv[]) exit (1); } + /* Test utime with NULL. + Since there's a race condition possible here, we check + the time before and after the call to utime. */ + now1 = time (NULL); + if (now1 == (time_t)-1) + { + perror ("time"); + remove (file); + exit (1); + } + + if (utime (file, NULL)) + { + perror ("utime NULL"); + remove (file); + exit (1); + } + + now2 = time (NULL); + if (now2 == (time_t)-1) + { + perror ("time"); + remove (file); + exit (1); + } + + if (stat (file, &stnow)) + { + perror ("stat"); + remove (file); + exit (1); + } + remove (file); if (st.st_mtime != ut.modtime) @@ -75,6 +112,18 @@ main (int argc, char *argv[]) exit (1); } + if (stnow.st_mtime < now1 || stnow.st_mtime > now2) + { + printf ("modtime %ld <%ld >%ld\n", st.st_mtime, now1, now2); + exit (1); + } + + if (stnow.st_atime < now1 || stnow.st_atime > now2) + { + printf ("actime %ld <%ld >%ld\n", st.st_atime, now1, now2); + exit (1); + } + puts ("Test succeeded."); exit (0); } diff --git a/sysdeps/unix/sysv/syscalls.list b/sysdeps/unix/sysv/syscalls.list index 2525bae2ea..2652153181 100644 --- a/sysdeps/unix/sysv/syscalls.list +++ b/sysdeps/unix/sysv/syscalls.list @@ -10,7 +10,7 @@ setrlimit - setrlimit i:ip setrlimit settimeofday - settimeofday i:PP __settimeofday settimeofday signal - signal i:ii signal stime - stime i:p stime -time - time i:p time +time - time i:P time times - times i:p __times times ulimit - ulimit i:ii ulimit -utime - utime i:pp utime +utime - utime i:sP utime |