This is the mail archive of the libc-hacker@sources.redhat.com mailing list for the glibc project.

Note that libc-hacker is a closed list. You may look at the archives of this list, but subscription and posting are not open.


Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]

PATCH: utime & time BP thunks


2000-08-03  Greg McGary  <greg@mcgary.org>

	* sysdeps/unix/sysv/syscalls.list (time, utime): Correct signatures.
	* io/test-utime.c: Test passing NULL as utimbuf* arg.

OK?

Index: sysdeps/unix/sysv/syscalls.list
===================================================================
RCS file: /cvs/glibc/libc/sysdeps/unix/sysv/syscalls.list,v
retrieving revision 1.5
diff -u -p -r1.5 syscalls.list
--- syscalls.list	2000/07/17 22:28:59	1.5
+++ syscalls.list	2000/08/03 19:44:12
@@ -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
Index: io/test-utime.c
===================================================================
RCS file: /cvs/glibc/libc/io/test-utime.c,v
retrieving revision 1.5
diff -u -p -r1.5 test-utime.c
--- test-utime.c	2000/06/21 12:38:44	1.5
+++ test-utime.c	2000/08/03 19:44:12
@@ -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)
@@ -72,6 +109,18 @@ main (int argc, char *argv[])
   if (st.st_atime != ut.actime)
     {
       printf ("actime %ld != %ld\n", st.st_atime, ut.actime);
+      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);
     }
 

Index Nav: [Date Index] [Subject Index] [Author Index] [Thread Index]
Message Nav: [Date Prev] [Date Next] [Thread Prev] [Thread Next]