[RFC PATCH 12/28] cli: lil: Check for ctrl-c
Sean Anderson
seanga2 at gmail.com
Thu Jul 1 08:15:55 CEST 2021
Check for ctrl-c in lil_parse. This works out to around every time a
function or command is called. We also check at the beginning of
lil_eval_expr so that constructs like
while {1} {}
get interrupted. Since there are no non-trivial commands in that example,
lil_parse never gets to its ctrlc check. However, we do need to evaluate
the loop expression, so that's a good place to put a check.
Signed-off-by: Sean Anderson <seanga2 at gmail.com>
---
common/cli_lil.c | 11 +++++++++++
1 file changed, 11 insertions(+)
diff --git a/common/cli_lil.c b/common/cli_lil.c
index c19a25b2bf..50e314a643 100644
--- a/common/cli_lil.c
+++ b/common/cli_lil.c
@@ -10,6 +10,7 @@
#include <common.h>
#include <cli_lil.h>
+#include <console.h>
#include <ctype.h>
#include <stdlib.h>
#include <stdio.h>
@@ -1117,6 +1118,11 @@ struct lil_value *lil_parse(struct lil *lil, const char *code, size_t codelen,
lil_free_value(val);
val = NULL;
+ if (ctrlc()) {
+ lil_set_error(lil, LIL_ERR_INTR, "interrupted");
+ goto cleanup;
+ }
+
words = substitute(lil);
if (!words || lil->err)
goto cleanup;
@@ -1671,6 +1677,11 @@ struct lil_value *lil_eval_expr(struct lil *lil, struct lil_value *code)
{
struct expreval ee;
+ if (ctrlc()) {
+ lil_set_error(lil, LIL_ERR_INTR, "interrupted");
+ return NULL;
+ }
+
code = lil_subst_to_value(lil, code);
if (lil->err)
return NULL;
--
2.32.0
More information about the U-Boot
mailing list