summaryrefslogtreecommitdiff
path: root/shell
diff options
context:
space:
mode:
authorDenys Vlasenko2021-09-07 01:52:21 +0200
committerDenys Vlasenko2021-09-07 01:52:21 +0200
commit41beb53787ec798a27f336c4758cb5ebd8f0c75a (patch)
tree159adc66892cbf865d070cf809d3ae0825df4d19 /shell
parente0bf3df0205d5ccef52df67b1760b8b54f15ec6e (diff)
downloadbusybox-41beb53787ec798a27f336c4758cb5ebd8f0c75a.zip
busybox-41beb53787ec798a27f336c4758cb5ebd8f0c75a.tar.gz
ash: eval: Check nflag in evaltree instead of cmdloop
Upstream commit: Date: Thu, 4 Jun 2020 21:53:55 +1000 eval: Check nflag in evaltree instead of cmdloop This patch moves the nflag check from cmdloop into evaltree. This is so that nflag will be in force even if we enter the shell via a path other than cmdloop, e.g., through sh -c. Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell')
-rw-r--r--shell/ash.c5
-rw-r--r--shell/ash_test/ash-misc/set-n1.right3
-rwxr-xr-xshell/ash_test/ash-misc/set-n1.tests2
3 files changed, 9 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index cfe0433..2d2c09b 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -9299,6 +9299,9 @@ evaltree(union node *n, int flags)
setstackmark(&smark);
+ if (nflag)
+ goto out;
+
if (n == NULL) {
TRACE(("evaltree(NULL) called\n"));
goto out;
@@ -13557,7 +13560,7 @@ cmdloop(int top)
out2str("\nUse \"exit\" to leave shell.\n");
}
numeof++;
- } else if (nflag == 0) {
+ } else {
int i;
/* job_warning can only be 2,1,0. Here 2->1, 1/0->0 */
diff --git a/shell/ash_test/ash-misc/set-n1.right b/shell/ash_test/ash-misc/set-n1.right
new file mode 100644
index 0000000..ac01831
--- /dev/null
+++ b/shell/ash_test/ash-misc/set-n1.right
@@ -0,0 +1,3 @@
+set -n stops in -c?
+YES
+Ok:0
diff --git a/shell/ash_test/ash-misc/set-n1.tests b/shell/ash_test/ash-misc/set-n1.tests
new file mode 100755
index 0000000..90d0f91
--- /dev/null
+++ b/shell/ash_test/ash-misc/set-n1.tests
@@ -0,0 +1,2 @@
+$THIS_SH -c "echo 'set -n stops in -c?'; set -n; echo NO" && echo YES
+echo Ok:$?