diff options
Diffstat (limited to 'commands/timeout.c')
-rw-r--r-- | commands/timeout.c | 62 |
1 files changed, 13 insertions, 49 deletions
diff --git a/commands/timeout.c b/commands/timeout.c index c8e930cd5b..2b99d4f749 100644 --- a/commands/timeout.c +++ b/commands/timeout.c @@ -16,40 +16,35 @@ * GNU General Public License for more details. * */ -#include <common.h> + #include <command.h> -#include <linux/stat.h> #include <errno.h> #include <getopt.h> -#include <clock.h> #include <environment.h> +#include <console_countdown.h> -#define TIMEOUT_RETURN (1 << 0) -#define TIMEOUT_CTRLC (1 << 1) -#define TIMEOUT_ANYKEY (1 << 2) -#define TIMEOUT_SILENT (1 << 3) +#include <linux/kernel.h> static int do_timeout(int argc, char *argv[]) { - int timeout = 3, ret = 1; - int flags = 0, opt, countdown; - int key = 0; - uint64_t start, second; + int timeout, ret, opt; + unsigned flags = 0; + char str[2] = { }; const char *varname = NULL; while((opt = getopt(argc, argv, "crsav:")) > 0) { switch(opt) { case 'r': - flags |= TIMEOUT_RETURN; + flags |= CONSOLE_COUNTDOWN_RETURN; break; case 'c': - flags |= TIMEOUT_CTRLC; + flags |= CONSOLE_COUNTDOWN_CTRLC; break; case 'a': - flags |= TIMEOUT_ANYKEY; + flags |= CONSOLE_COUNTDOWN_ANYKEY; break; case 's': - flags |= TIMEOUT_SILENT; + flags |= CONSOLE_COUNTDOWN_SILENT; break; case 'v': varname = optarg; @@ -63,43 +58,12 @@ static int do_timeout(int argc, char *argv[]) return COMMAND_ERROR_USAGE; timeout = simple_strtoul(argv[optind], NULL, 0); + ret = console_countdown(timeout, flags, str); - start = get_time_ns(); - second = start; - - countdown = timeout; - - if (!(flags & TIMEOUT_SILENT)) - printf("%2d", countdown--); - - do { - if (tstc()) { - key = getc(); - if (flags & TIMEOUT_CTRLC && key == 3) - goto out; - if (flags & TIMEOUT_ANYKEY) - goto out; - if (flags & TIMEOUT_RETURN && key == '\n') - goto out; - key = 0; - } - if (!(flags & TIMEOUT_SILENT) && is_timeout(second, SECOND)) { - printf("\b\b%2d", countdown--); - second += SECOND; - } - } while (!is_timeout(start, timeout * SECOND)); - - ret = 0; -out: - if (varname && key) { - char str[2] = { }; - str[0] = key; + if (varname && str[0]) setenv(varname, str); - } - if (!(flags & TIMEOUT_SILENT)) - printf("\n"); - return ret; + return ret ? 1 : 0; } BAREBOX_CMD_HELP_START(timeout) |