summaryrefslogtreecommitdiffstats
path: root/common
diff options
context:
space:
mode:
authorSascha Hauer <s.hauer@pengutronix.de>2019-02-25 12:26:07 +0100
committerSascha Hauer <s.hauer@pengutronix.de>2019-04-24 12:22:59 +0200
commit5455198d56153b6ca39819c07cf9358ad02883fd (patch)
tree6b885ec7d83a2679cb1238c2cb94e7d8f080b34f /common
parentec5f3d3dbbc054cf704a658d2734b67df466926b (diff)
downloadbarebox-5455198d56153b6ca39819c07cf9358ad02883fd.tar.gz
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.c19
1 files changed, 18 insertions, 1 deletions
diff --git a/common/console_countdown.c b/common/console_countdown.c
index 36da1ce..8d09894 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')