Merge remote-tracking branch 'nsz/review'
authorRich Felker <dalias@aerifal.cx>
Sun, 26 May 2013 22:22:12 +0000 (18:22 -0400)
committerRich Felker <dalias@aerifal.cx>
Sun, 26 May 2013 22:22:12 +0000 (18:22 -0400)
arch/arm/bits/alltypes.h.sh
arch/i386/bits/alltypes.h.sh
arch/microblaze/bits/alltypes.h.sh
arch/mips/bits/alltypes.h.sh
arch/powerpc/bits/alltypes.h.sh
src/time/clock.c

index c1db1a0..62e0327 100755 (executable)
@@ -104,7 +104,7 @@ TYPEDEF unsigned long long fsfilcnt_t;
 
 TYPEDEF void * timer_t;
 TYPEDEF int clockid_t;
-TYPEDEF unsigned long clock_t;
+TYPEDEF long clock_t;
 
 TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t;
 TYPEDEF struct __siginfo siginfo_t;
index aec7373..76c50ec 100755 (executable)
@@ -117,7 +117,7 @@ TYPEDEF unsigned long long fsfilcnt_t;
 
 TYPEDEF void * timer_t;
 TYPEDEF int clockid_t;
-TYPEDEF unsigned long clock_t;
+TYPEDEF long clock_t;
 
 TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t;
 TYPEDEF struct __siginfo siginfo_t;
index 23f12d8..268321a 100755 (executable)
@@ -104,7 +104,7 @@ TYPEDEF unsigned long long fsfilcnt_t;
 
 TYPEDEF void * timer_t;
 TYPEDEF int clockid_t;
-TYPEDEF unsigned long clock_t;
+TYPEDEF long clock_t;
 
 TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t;
 TYPEDEF struct __siginfo siginfo_t;
index 23f12d8..268321a 100755 (executable)
@@ -104,7 +104,7 @@ TYPEDEF unsigned long long fsfilcnt_t;
 
 TYPEDEF void * timer_t;
 TYPEDEF int clockid_t;
-TYPEDEF unsigned long clock_t;
+TYPEDEF long clock_t;
 
 TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t;
 TYPEDEF struct __siginfo siginfo_t;
index 7d3cdc3..5fe05e2 100755 (executable)
@@ -104,7 +104,7 @@ TYPEDEF unsigned long long fsfilcnt_t;
 
 TYPEDEF void * timer_t;
 TYPEDEF int clockid_t;
-TYPEDEF unsigned long clock_t;
+TYPEDEF long clock_t;
 
 TYPEDEF struct { unsigned long __bits[128/sizeof(long)]; } sigset_t;
 TYPEDEF struct __siginfo siginfo_t;
index 78403af..c348e39 100644 (file)
@@ -1,15 +1,18 @@
 #include <time.h>
-#include <sys/times.h>
-#include "syscall.h"
+#include <limits.h>
 
 int __clock_gettime(clockid_t, struct timespec *);
 
 clock_t clock()
 {
        struct timespec ts;
-       struct tms tms;
-       if (!__clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts))
-               return ts.tv_sec*1000000 + ts.tv_nsec/1000;
-       __syscall(SYS_times, &tms);
-       return (tms.tms_utime + tms.tms_stime)*10000;
+
+       if (__clock_gettime(CLOCK_PROCESS_CPUTIME_ID, &ts))
+               return -1;
+
+       if (ts.tv_sec > LONG_MAX/1000000
+        || ts.tv_nsec/1000 > LONG_MAX-1000000*ts.tv_sec)
+               return -1;
+
+       return ts.tv_sec*1000000 + ts.tv_nsec/1000;
 }