diff options
author | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2014-05-29 21:40:33 +0100 |
---|---|---|
committer | Peter Stephenson <p.w.stephenson@ntlworld.com> | 2014-05-29 21:40:33 +0100 |
commit | 880020ca2ed8207fe39aa95169a6f9226ff7b8dc (patch) | |
tree | 79483423b8e155062c311cbf7ce057be5b1905e5 /Src | |
parent | 5554cf8244aaa4e7bf5f153e66cd5db64e50c6e4 (diff) | |
download | zsh-880020ca2ed8207fe39aa95169a6f9226ff7b8dc.tar.gz zsh-880020ca2ed8207fe39aa95169a6f9226ff7b8dc.tar.xz zsh-880020ca2ed8207fe39aa95169a6f9226ff7b8dc.zip |
32624: use correct scaling factor (clock ticks) for times
Diffstat (limited to 'Src')
-rw-r--r-- | Src/builtin.c | 6 | ||||
-rw-r--r-- | Src/jobs.c | 32 |
2 files changed, 21 insertions, 17 deletions
diff --git a/Src/builtin.c b/Src/builtin.c index 0cc54b7bb..42354b928 100644 --- a/Src/builtin.c +++ b/Src/builtin.c @@ -6095,8 +6095,9 @@ bin_test(char *name, char **argv, UNUSED(Options ops), int func) } /* display a time, provided in units of 1/60s, as minutes and seconds */ -#define pttime(X) printf("%ldm%ld.%02lds",((long) (X))/3600,\ - ((long) (X))/60%60,((long) (X))*100/60%100) +#define pttime(X) printf("%ldm%ld.%02lds",((long) (X))/(60 * clktck),\ + ((long) (X))/clktck%clktck,\ + ((long) (X))*100/clktck%100) /* times: display, in a two-line format, the times provided by times(3) */ @@ -6105,6 +6106,7 @@ int bin_times(UNUSED(char *name), UNUSED(char **argv), UNUSED(Options ops), UNUSED(int func)) { struct tms buf; + long clktck = get_clktck(); /* get time accounting information */ if (times(&buf) == -1) diff --git a/Src/jobs.c b/Src/jobs.c index 871946598..c4a0707d4 100644 --- a/Src/jobs.c +++ b/Src/jobs.c @@ -618,13 +618,11 @@ setprevjob(void) } /**/ -#ifndef HAVE_GETRUSAGE -static long clktck = 0; - -/**/ -static void -set_clktck(void) +long +get_clktck(void) { + static long clktck; + #ifdef _SC_CLK_TCK if (!clktck) /* fetch clock ticks per second from * @@ -646,9 +644,9 @@ set_clktck(void) # endif # endif #endif + + return clktck; } -/**/ -#endif /**/ static void @@ -698,11 +696,13 @@ printtime(struct timeval *real, child_times_t *ti, char *desc) percent = 100.0 * total_time / (real->tv_sec + real->tv_usec / 1000000.0); #else - set_clktck(); - user_time = ti->ut / (double) clktck; - system_time = ti->st / (double) clktck; - percent = 100.0 * (ti->ut + ti->st) - / (clktck * real->tv_sec + clktck * real->tv_usec / 1000000.0); + { + long clktck = get_clktck(); + user_time = ti->ut / (double) clktck; + system_time = ti->st / (double) clktck; + percent = 100.0 * (ti->ut + ti->st) + / (clktck * real->tv_sec + clktck * real->tv_usec / 1000000.0); + } #endif queue_signals(); @@ -910,8 +910,10 @@ should_report_time(Job j) reporttime--; return reporttime <= 0; #else - set_clktck(); - return ((j->procs->ti.ut + j->procs->ti.st) / clktck >= reporttime); + { + clktck = get_clktck(); + return ((j->procs->ti.ut + j->procs->ti.st) / clktck >= reporttime); + } #endif } |