aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2014-03-16 18:41:11 +0100
committerDenys Vlasenko <vda.linux@googlemail.com>2014-03-16 18:41:11 +0100
commit109ee5d33694a03cda3424b4846584250832ba8e (patch)
tree608faad5cce730799afdd05d54447fa0c6b77b0a
parent438b4ac2860f4aec5b5fb82c47f75a0cb80d9cb4 (diff)
downloadbusybox-w32-109ee5d33694a03cda3424b4846584250832ba8e.tar.gz
busybox-w32-109ee5d33694a03cda3424b4846584250832ba8e.tar.bz2
busybox-w32-109ee5d33694a03cda3424b4846584250832ba8e.zip
ash: make "locak VAR" unset VAR (bash does that)
Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
-rw-r--r--shell/ash.c3
-rw-r--r--shell/ash_test/ash-misc/local1.right4
-rwxr-xr-xshell/ash_test/ash-misc/local1.tests11
3 files changed, 18 insertions, 0 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 04ba447b1..7a097c814 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -8960,6 +8960,9 @@ mklocal(char *name)
8960 vp->flags |= VSTRFIXED|VTEXTFIXED; 8960 vp->flags |= VSTRFIXED|VTEXTFIXED;
8961 if (eq) 8961 if (eq)
8962 setvareq(name, 0); 8962 setvareq(name, 0);
8963 else
8964 /* "local VAR" unsets VAR: */
8965 setvar(name, NULL, 0);
8963 } 8966 }
8964 } 8967 }
8965 lvp->vp = vp; 8968 lvp->vp = vp;
diff --git a/shell/ash_test/ash-misc/local1.right b/shell/ash_test/ash-misc/local1.right
new file mode 100644
index 000000000..a2d121df6
--- /dev/null
+++ b/shell/ash_test/ash-misc/local1.right
@@ -0,0 +1,4 @@
1A1:'A'
2A2:''
3A3:''
4A4:'A'
diff --git a/shell/ash_test/ash-misc/local1.tests b/shell/ash_test/ash-misc/local1.tests
new file mode 100755
index 000000000..b1e675059
--- /dev/null
+++ b/shell/ash_test/ash-misc/local1.tests
@@ -0,0 +1,11 @@
1a=A
2f() {
3 local a
4 # the above line unsets $a
5 echo "A2:'$a'"
6 unset a
7 echo "A3:'$a'"
8}
9echo "A1:'$a'"
10f
11echo "A4:'$a'"