diff options
author | Elliott Hughes <enh@google.com> | 2018-05-03 15:09:14 -0700 |
---|---|---|
committer | Rob Landley <rob@landley.net> | 2018-05-06 10:23:22 -0500 |
commit | eee28e7b5851a6eb16f7969393d8c6292b1f8754 (patch) | |
tree | c740f8f098623e245fd00e689894b944fc2687f8 /lib | |
parent | 828fc9c8be7e68a901e4fe79504a67cb6c9c33e8 (diff) | |
download | toybox-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.c | 10 |
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]; } |