]> git.ipfire.org Git - thirdparty/glibc.git/commitdiff
* sysdeps/unix/sysv/syscalls.list (time, utime): Correct signatures.
authorGreg McGary <greg@mcgary.org>
Thu, 3 Aug 2000 20:04:31 +0000 (20:04 +0000)
committerGreg McGary <greg@mcgary.org>
Thu, 3 Aug 2000 20:04:31 +0000 (20:04 +0000)
* io/test-utime.c: Test passing NULL as utimbuf* arg.

io/test-utime.c
sysdeps/unix/sysv/syscalls.list

index 32e14bd161fb952736b7f86dd459a29d744051a3..8dbbcf990d3b90075253a3f2756f701b30a37741 100644 (file)
@@ -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);
 }
index 2525bae2eacaabd662d6f466e07180c616ea1eca..26521531818f495cf76f7a49897d5f4ea5285f79 100644 (file)
@@ -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