Rewrite timescmd() function to avoid the use of floating point and to
correct a bug in the seconds display where something like 65 seconds would be output as "1m65.000000s".
This commit is contained in:
parent
5b3c05637d
commit
4456f25e8f
42
shell/ash.c
42
shell/ash.c
@ -12417,27 +12417,35 @@ findvar(struct var **vpp, const char *name)
|
|||||||
}
|
}
|
||||||
/* $NetBSD: setmode.c,v 1.29 2003/01/15 23:58:03 kleink Exp $ */
|
/* $NetBSD: setmode.c,v 1.29 2003/01/15 23:58:03 kleink Exp $ */
|
||||||
|
|
||||||
/*
|
|
||||||
* Copyright (c) 1999 Herbert Xu <herbert@debian.org>
|
|
||||||
* This code for the times builtin.
|
|
||||||
*/
|
|
||||||
|
|
||||||
#include <sys/times.h>
|
#include <sys/times.h>
|
||||||
|
|
||||||
int timescmd(int ac, char **av) {
|
static const unsigned char timescmd_str[] = {
|
||||||
struct tms buf;
|
' ', offsetof(struct tms, tms_utime),
|
||||||
long int clk_tck = sysconf(_SC_CLK_TCK);
|
'\n', offsetof(struct tms, tms_stime),
|
||||||
|
' ', offsetof(struct tms, tms_cutime),
|
||||||
|
'\n', offsetof(struct tms, tms_cstime),
|
||||||
|
0
|
||||||
|
};
|
||||||
|
|
||||||
|
static int timescmd(int ac, char **av)
|
||||||
|
{
|
||||||
|
long int clk_tck, s, t;
|
||||||
|
const unsigned char *p;
|
||||||
|
struct tms buf;
|
||||||
|
|
||||||
|
clk_tck = sysconf(_SC_CLK_TCK);
|
||||||
times(&buf);
|
times(&buf);
|
||||||
out1fmt("%dm%fs %dm%fs\n%dm%fs %dm%fs\n",
|
|
||||||
(int) (buf.tms_utime / clk_tck / 60),
|
p = timescmd_str;
|
||||||
((double) buf.tms_utime) / clk_tck,
|
do {
|
||||||
(int) (buf.tms_stime / clk_tck / 60),
|
t = *(clock_t *)(((char *) &buf) + p[1]);
|
||||||
((double) buf.tms_stime) / clk_tck,
|
s = t / clk_tck;
|
||||||
(int) (buf.tms_cutime / clk_tck / 60),
|
out1fmt("%ldm%ld.%.3lds%c",
|
||||||
((double) buf.tms_cutime) / clk_tck,
|
s/60, s%60,
|
||||||
(int) (buf.tms_cstime / clk_tck / 60),
|
((t - s * clk_tck) * 1000) / clk_tck,
|
||||||
((double) buf.tms_cstime) / clk_tck);
|
p[0]);
|
||||||
|
} while (*(p += 2));
|
||||||
|
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user