aboutsummaryrefslogtreecommitdiff
path: root/lib
diff options
context:
space:
mode:
authorElliott Hughes <enh@google.com>2018-05-03 15:09:14 -0700
committerRob Landley <rob@landley.net>2018-05-06 10:23:22 -0500
commiteee28e7b5851a6eb16f7969393d8c6292b1f8754 (patch)
treec740f8f098623e245fd00e689894b944fc2687f8 /lib
parent828fc9c8be7e68a901e4fe79504a67cb6c9c33e8 (diff)
downloadtoybox-eee28e7b5851a6eb16f7969393d8c6292b1f8754.tar.gz
Support fractional seconds (and other time units) in `top -d`.
LTP uses `top -d 0.1`, which isn't convincingly useful, but general support for other time units might be useful, and switching to xparsetime addresses both at once. Also fix 3169d948c049664bcf7216d4c4ae751881099d3e where I mistakenly treated `rev` and `toys.optflags&FLAG_b` as interchangeable. (Without this second fix, `top -b` looks fine but `top` is broken!) Also fix xparsetime to reject input such as "monkey" or "1monkey".
Diffstat (limited to 'lib')
-rw-r--r--lib/xwrap.c10
1 files changed, 7 insertions, 3 deletions
diff --git a/lib/xwrap.c b/lib/xwrap.c
index 54985db3..26383c92 100644
--- a/lib/xwrap.c
+++ b/lib/xwrap.c
@@ -792,15 +792,19 @@ long xparsetime(char *arg, long units, long *fraction)
{
double d;
long l;
+ char *end;
+
+ if (CFG_TOYBOX_FLOAT) d = strtod(arg, &end);
+ else l = strtoul(arg, &end, 10);
- if (CFG_TOYBOX_FLOAT) d = strtod(arg, &arg);
- else l = strtoul(arg, &arg, 10);
+ if (end == arg) error_exit("Not a number '%s'", arg);
+ arg = end;
// Parse suffix
if (*arg) {
int ismhd[]={1,60,3600,86400}, i = stridx("smhd", *arg);
- if (i == -1) error_exit("Unknown suffix '%c'", *arg);
+ if (i == -1 || *(arg+1)) error_exit("Unknown suffix '%s'", arg);
if (CFG_TOYBOX_FLOAT) d *= ismhd[i];
else l *= ismhd[i];
}