Whoops, prior diff for usr.bin/time/time.c has a dumb typo,
corrected diff attached.

--
Scott Cheloha

Index: usr.bin/time/time.c
===================================================================
RCS file: /cvs/src/usr.bin/time/time.c,v
retrieving revision 1.21
diff -u -p -r1.21 time.c
--- usr.bin/time/time.c 10 Oct 2015 14:49:23 -0000      1.21
+++ usr.bin/time/time.c 13 Jul 2017 01:29:00 -0000
@@ -52,7 +52,7 @@ main(int argc, char *argv[])
 {
        pid_t pid;
        int ch, status;
-       struct timeval before, after;
+       struct timespec before, after, during;
        struct rusage ru;
        int exitonsig = 0;
 
@@ -79,7 +79,7 @@ main(int argc, char *argv[])
        if (argc < 1)
                usage();
 
-       gettimeofday(&before, (struct timezone *)NULL);
+       clock_gettime(CLOCK_MONOTONIC, &before);
        switch(pid = vfork()) {
        case -1:                        /* error */
                perror("time");
@@ -97,24 +97,23 @@ main(int argc, char *argv[])
        (void)signal(SIGQUIT, SIG_IGN);
        while (wait3(&status, 0, &ru) != pid)
                ;
-       gettimeofday(&after, (struct timezone *)NULL);
+       clock_gettime(CLOCK_MONOTONIC, &after);
        if (WIFSIGNALED(status))
                exitonsig = WTERMSIG(status);
        if (!WIFEXITED(status))
                fprintf(stderr, "Command terminated abnormally.\n");
-       timersub(&after, &before, &after);
+       timespecsub(&after, &before, &during);
 
        if (portableflag) {
                fprintf(stderr, "real %9lld.%02ld\n",
-                       (long long)after.tv_sec, after.tv_usec/10000);
+                       (long long)during.tv_sec, during.tv_nsec/10000000);
                fprintf(stderr, "user %9lld.%02ld\n",
                        (long long)ru.ru_utime.tv_sec, 
ru.ru_utime.tv_usec/10000);
                fprintf(stderr, "sys  %9lld.%02ld\n",
                        (long long)ru.ru_stime.tv_sec, 
ru.ru_stime.tv_usec/10000);
        } else {
-
                fprintf(stderr, "%9lld.%02ld real ",
-                       (long long)after.tv_sec, after.tv_usec/10000);
+                       (long long)during.tv_sec, during.tv_nsec/10000000);
                fprintf(stderr, "%9lld.%02ld user ",
                        (long long)ru.ru_utime.tv_sec, 
ru.ru_utime.tv_usec/10000);
                fprintf(stderr, "%9lld.%02ld sys\n",

Reply via email to