diff options
author | Sascha Hauer <s.hauer@pengutronix.de> | 2019-02-25 12:26:07 +0100 |
---|---|---|
committer | Sascha Hauer <s.hauer@pengutronix.de> | 2019-04-24 12:22:59 +0200 |
commit | 5455198d56153b6ca39819c07cf9358ad02883fd (patch) | |
tree | 6b885ec7d83a2679cb1238c2cb94e7d8f080b34f /common | |
parent | ec5f3d3dbbc054cf704a658d2734b67df466926b (diff) | |
download | barebox-5455198d56153b6ca39819c07cf9358ad02883fd.tar.gz barebox-5455198d56153b6ca39819c07cf9358ad02883fd.tar.xz |
console_countdown: Add pattern list
This adds an optional string argument to console_countdown() which can
hold a list of keys which also abort the countdown.
Signed-off-by: Sascha Hauer <s.hauer@pengutronix.de>
Diffstat (limited to 'common')
-rw-r--r-- | common/console_countdown.c | 19 |
1 files changed, 18 insertions, 1 deletions
diff --git a/common/console_countdown.c b/common/console_countdown.c index 36da1ce577..8d09894c30 100644 --- a/common/console_countdown.c +++ b/common/console_countdown.c @@ -30,7 +30,22 @@ void console_countdown_abort(void) console_countdown_timeout_abort = true; } -int console_countdown(int timeout_s, unsigned flags, char *out_key) +static int key_in_list(char key, const char *keys) +{ + if (!keys) + return false; + + while (*keys) { + if (key == *keys) + return true; + keys++; + } + + return false; +} + +int console_countdown(int timeout_s, unsigned flags, const char *keys, + char *out_key) { uint64_t start, second; int countdown, ret = -EINTR; @@ -48,6 +63,8 @@ int console_countdown(int timeout_s, unsigned flags, char *out_key) if (tstc()) { key = getchar(); if (key >= 0) { + if (key_in_list(key, keys)) + goto out; if (flags & CONSOLE_COUNTDOWN_ANYKEY) goto out; if (flags & CONSOLE_COUNTDOWN_RETURN && key == '\n') |