On Wed, Jun 14, 2023 at 10:34:20AM -0400, Josiah Frentsos wrote: > On Tue, Jun 13, 2023 at 10:59:53PM -0500, Scott Cheloha wrote: > > Index: usr.bin/time/time.c > > =================================================================== > > RCS file: /cvs/src/usr.bin/time/time.c,v > > retrieving revision 1.25 > > diff -u -p -r1.25 time.c > > --- usr.bin/time/time.c 21 Aug 2017 13:38:02 -0000 1.25 > > +++ usr.bin/time/time.c 14 Jun 2023 03:23:29 -0000 > > @@ -100,19 +100,19 @@ main(int argc, char *argv[]) > > timespecsub(&after, &before, &during); > > > > if (portableflag) { > > - fprintf(stderr, "real %9lld.%02ld\n", > > - (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); > > + fprintf(stderr, "real %9lld.%03ld\n", > > + (long long)during.tv_sec, during.tv_nsec / 1000000); > > + fprintf(stderr, "user %9lld.%03ld\n", > > + (long long)ru.ru_utime.tv_sec, ru.ru_utime.tv_usec / 1000); > > + fprintf(stderr, "sys %9lld.%03ld\n", > > + (long long)ru.ru_stime.tv_sec, ru.ru_stime.tv_usec / 1000); > > } else { > > - fprintf(stderr, "%9lld.%02ld real ", > > - (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", > > - (long long)ru.ru_stime.tv_sec, > > ru.ru_stime.tv_usec/10000); > > + fprintf(stderr, "%9lld.%03ld real ", > > + (long long)during.tv_sec, during.tv_nsec / 1000000); > > + fprintf(stderr, "%9lld.%0ld user ", > ^^^^ > > Should this be "%03ld"?
Whoops, yep, good catch. Index: bin/csh/time.c =================================================================== RCS file: /cvs/src/bin/csh/time.c,v retrieving revision 1.18 diff -u -p -r1.18 time.c --- bin/csh/time.c 8 Mar 2023 04:43:04 -0000 1.18 +++ bin/csh/time.c 14 Jun 2023 15:30:01 -0000 @@ -40,6 +40,7 @@ * C Shell - routines handling process timing and niceing */ static void pdeltat(struct timeval *, struct timeval *); +static void pdelta_hms(const struct timespec *, const struct timespec *); void settimes(void) @@ -145,7 +146,7 @@ prusage(struct rusage *r0, struct rusage break; case 'E': /* elapsed (wall-clock) time */ - pcsecs((long) ms); + pdelta_hms(e, b); break; case 'P': /* percent time spent running */ @@ -227,8 +228,7 @@ pdeltat(struct timeval *t1, struct timev struct timeval td; timersub(t1, t0, &td); - (void) fprintf(cshout, "%lld.%01ld", (long long)td.tv_sec, - td.tv_usec / 100000); + fprintf(cshout, "%lld.%03ld", (long long)td.tv_sec, td.tv_usec / 1000); } #define P2DIG(i) (void) fprintf(cshout, "%d%d", (i) / 10, (i) % 10) @@ -254,23 +254,18 @@ minsec: } void -pcsecs(long l) /* PWP: print mm:ss.dd, l is in sec*100 */ +pdelta_hms(const struct timespec *t1, const struct timespec *t0) { - int i; + struct timespec elapsed; + long long hours, minutes, seconds; - i = l / 360000; - if (i) { - (void) fprintf(cshout, "%d:", i); - i = (l % 360000) / 100; - P2DIG(i / 60); - goto minsec; - } - i = l / 100; - (void) fprintf(cshout, "%d", i / 60); -minsec: - i %= 60; - (void) fputc(':', cshout); - P2DIG(i); - (void) fputc('.', cshout); - P2DIG((int) (l % 100)); + timespecsub(t1, t0, &elapsed); + hours = elapsed.tv_sec / 3600; + minutes = (elapsed.tv_sec % 3600) / 60; + seconds = elapsed.tv_sec % 60; + if (hours != 0) + fprintf(cshout, "%lld:%02lld:", hours, minutes); + else + fprintf(cshout, "%lld:", minutes); + fprintf(cshout, "%02lld.%03ld", seconds, elapsed.tv_nsec / 1000000); } Index: bin/ksh/c_sh.c =================================================================== RCS file: /cvs/src/bin/ksh/c_sh.c,v retrieving revision 1.64 diff -u -p -r1.64 c_sh.c --- bin/ksh/c_sh.c 22 May 2020 07:50:07 -0000 1.64 +++ bin/ksh/c_sh.c 14 Jun 2023 15:30:01 -0000 @@ -681,13 +681,13 @@ p_tv(struct shf *shf, int posix, struct char *suffix) { if (posix) - shf_fprintf(shf, "%s%*lld.%02ld%s", prefix ? prefix : "", - width, (long long)tv->tv_sec, tv->tv_usec / 10000, suffix); + shf_fprintf(shf, "%s%*lld.%03ld%s", prefix ? prefix : "", + width, (long long)tv->tv_sec, tv->tv_usec / 1000, suffix); else - shf_fprintf(shf, "%s%*lldm%02lld.%02lds%s", prefix ? prefix : "", + shf_fprintf(shf, "%s%*lldm%02lld.%03lds%s", prefix ? prefix : "", width, (long long)tv->tv_sec / 60, (long long)tv->tv_sec % 60, - tv->tv_usec / 10000, suffix); + tv->tv_usec / 1000, suffix); } static void @@ -695,14 +695,14 @@ p_ts(struct shf *shf, int posix, struct char *suffix) { if (posix) - shf_fprintf(shf, "%s%*lld.%02ld%s", prefix ? prefix : "", - width, (long long)ts->tv_sec, ts->tv_nsec / 10000000, + shf_fprintf(shf, "%s%*lld.%03ld%s", prefix ? prefix : "", + width, (long long)ts->tv_sec, ts->tv_nsec / 1000000, suffix); else - shf_fprintf(shf, "%s%*lldm%02lld.%02lds%s", prefix ? prefix : "", + shf_fprintf(shf, "%s%*lldm%02lld.%03lds%s", prefix ? prefix : "", width, (long long)ts->tv_sec / 60, (long long)ts->tv_sec % 60, - ts->tv_nsec / 10000000, suffix); + ts->tv_nsec / 1000000, suffix); } Index: usr.bin/time/time.c =================================================================== RCS file: /cvs/src/usr.bin/time/time.c,v retrieving revision 1.25 diff -u -p -r1.25 time.c --- usr.bin/time/time.c 21 Aug 2017 13:38:02 -0000 1.25 +++ usr.bin/time/time.c 14 Jun 2023 15:30:01 -0000 @@ -100,19 +100,19 @@ main(int argc, char *argv[]) timespecsub(&after, &before, &during); if (portableflag) { - fprintf(stderr, "real %9lld.%02ld\n", - (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); + fprintf(stderr, "real %9lld.%03ld\n", + (long long)during.tv_sec, during.tv_nsec / 1000000); + fprintf(stderr, "user %9lld.%03ld\n", + (long long)ru.ru_utime.tv_sec, ru.ru_utime.tv_usec / 1000); + fprintf(stderr, "sys %9lld.%03ld\n", + (long long)ru.ru_stime.tv_sec, ru.ru_stime.tv_usec / 1000); } else { - fprintf(stderr, "%9lld.%02ld real ", - (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", - (long long)ru.ru_stime.tv_sec, ru.ru_stime.tv_usec/10000); + fprintf(stderr, "%9lld.%03ld real ", + (long long)during.tv_sec, during.tv_nsec / 1000000); + fprintf(stderr, "%9lld.%03ld user ", + (long long)ru.ru_utime.tv_sec, ru.ru_utime.tv_usec / 1000); + fprintf(stderr, "%9lld.%03ld sys\n", + (long long)ru.ru_stime.tv_sec, ru.ru_stime.tv_usec / 1000); } if (lflag) {