From ab80e01cd9865571875b5dde7d2f88dea3331969 Mon Sep 17 00:00:00 2001 From: Ron Yorston Date: Mon, 3 Aug 2015 13:46:00 +0100 Subject: ash: allow newline after variable name in for loop Newline is a valid delimiter between the variable name and `in` keyword in for loops. Based on commit 22e8fb4 from git://git.kernel.org/pub/scm/utils/dash/dash.git by Herbert Xu. function old new delta parse_command 1568 1563 -5 ------------------------------------------------------------------------------ (add/remove: 0/0 grow/shrink: 0/1 up/down: 0/-5) Total: -5 bytes Signed-off-by: Ron Yorston Signed-off-by: Denys Vlasenko --- shell/ash.c | 4 ++-- shell/ash_test/ash-misc/for.right | 1 + shell/ash_test/ash-misc/for.tests | 5 +++++ 3 files changed, 8 insertions(+), 2 deletions(-) create mode 100644 shell/ash_test/ash-misc/for.right create mode 100755 shell/ash_test/ash-misc/for.tests diff --git a/shell/ash.c b/shell/ash.c index 17121aa9b..3339666b9 100644 --- a/shell/ash.c +++ b/shell/ash.c @@ -10913,7 +10913,7 @@ parse_command(void) n1 = stzalloc(sizeof(struct nfor)); n1->type = NFOR; n1->nfor.var = wordtext; - checkkwd = CHKKWD | CHKALIAS; + checkkwd = CHKNL | CHKKWD | CHKALIAS; if (readtoken() == TIN) { app = ≈ while (readtoken() == TWORD) { @@ -10940,7 +10940,7 @@ parse_command(void) * Newline or semicolon here is optional (but note * that the original Bourne shell only allowed NL). */ - if (lasttoken != TNL && lasttoken != TSEMI) + if (lasttoken != TSEMI) tokpushback = 1; } checkkwd = CHKNL | CHKKWD | CHKALIAS; diff --git a/shell/ash_test/ash-misc/for.right b/shell/ash_test/ash-misc/for.right new file mode 100644 index 000000000..d86bac9de --- /dev/null +++ b/shell/ash_test/ash-misc/for.right @@ -0,0 +1 @@ +OK diff --git a/shell/ash_test/ash-misc/for.tests b/shell/ash_test/ash-misc/for.tests new file mode 100755 index 000000000..4889a9f2d --- /dev/null +++ b/shell/ash_test/ash-misc/for.tests @@ -0,0 +1,5 @@ +for i +in OK +do + echo $i +done -- cgit v1.2.3