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",