diff options
author | Denys Vlasenko | 2021-09-07 01:52:21 +0200 |
---|---|---|
committer | Denys Vlasenko | 2021-09-07 01:52:21 +0200 |
commit | 41beb53787ec798a27f336c4758cb5ebd8f0c75a (patch) | |
tree | 159adc66892cbf865d070cf809d3ae0825df4d19 /shell | |
parent | e0bf3df0205d5ccef52df67b1760b8b54f15ec6e (diff) | |
download | busybox-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.c | 5 | ||||
-rw-r--r-- | shell/ash_test/ash-misc/set-n1.right | 3 | ||||
-rwxr-xr-x | shell/ash_test/ash-misc/set-n1.tests | 2 |
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:$? |