extend fractional duration support to "top -d N.N" and "timeout"

function                                             old     new   delta
parse_duration_str                                     -     168    +168
sleep_for_duration                                     -     157    +157
top_main                                             885     928     +43
timeout_main                                         269     312     +43
handle_input                                         571     614     +43
duration_suffixes                                      -      40     +40
sfx                                                   40       -     -40
sleep_main                                           364      79    -285
------------------------------------------------------------------------------
(add/remove: 4/1 grow/shrink: 3/1 up/down: 494/-325)          Total: 169 bytes

Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
This commit is contained in:
Denys Vlasenko
2018-08-03 18:17:12 +02:00
parent 9b1c8bf89b
commit 4c20d9f2b0
5 changed files with 101 additions and 81 deletions

View File

@@ -52,7 +52,8 @@ int timeout_main(int argc UNUSED_PARAM, char **argv)
int signo;
int status;
int parent = 0;
int timeout = 10;
unsigned timeout;
const char *timeout_s = "10";
pid_t pid;
#if !BB_MMU
char *sv1, *sv2;
@@ -63,11 +64,12 @@ int timeout_main(int argc UNUSED_PARAM, char **argv)
/* -t SECONDS; -p PARENT_PID */
/* '+': stop at first non-option */
getopt32(argv, "+s:t:+" USE_FOR_NOMMU("p:+"), &opt_s, &timeout, &parent);
getopt32(argv, "+s:t:" USE_FOR_NOMMU("p:+"), &opt_s, &timeout_s, &parent);
/*argv += optind; - no, wait for bb_daemonize_or_rexec! */
signo = get_signum(opt_s);
if (signo < 0)
bb_error_msg_and_die("unknown signal '%s'", opt_s);
timeout = parse_duration_str((char*)timeout_s);
/* We want to create a grandchild which will watch
* and kill the grandparent. Other methods: