aboutsummaryrefslogtreecommitdiff
path: root/shell/ash.c
diff options
context:
space:
mode:
authorDenys Vlasenko <vda.linux@googlemail.com>2016-09-30 14:36:59 +0200
committerDenys Vlasenko <vda.linux@googlemail.com>2016-09-30 14:46:41 +0200
commite627ac95bef4d61c2d264fc87d767cb7a948c38f (patch)
treecb581116e18c5a2b07349edbfc1757a7178476da /shell/ash.c
parent6a0710e954d913e1096893bf3d037667420db3be (diff)
downloadbusybox-w32-e627ac95bef4d61c2d264fc87d767cb7a948c38f.tar.gz
busybox-w32-e627ac95bef4d61c2d264fc87d767cb7a948c38f.tar.bz2
busybox-w32-e627ac95bef4d61c2d264fc87d767cb7a948c38f.zip
ash: [VAR] Initialise OPTIND after importing environment
Upstream commit 1: Date: Fri, 23 Aug 2013 21:27:42 +1000 [VAR] Initialise OPTIND after importing environment On Sat, Mar 23, 2013 at 01:46:20AM +0000, Chris F.A. Johnson wrote: > According to both the dash man page and the POSIX spec, "When the > shell is invoked, OPTIND is initialized to 1." > > However, it actually takes the value of the environment variable > if it exists: > > $ OPTIND=4 dash -c 'echo "$OPTIND"' > 4 > $ OPTIND=4 bash -c 'echo "$OPTIND"' > 1 > $ OPTIND=4 ksh -c 'echo "$OPTIND"' > 1 > $ OPTIND=4 ksh93 -c 'echo "$OPTIND"' > 1 This patch fixes this by initialising OPTIND after importing the environment. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Upstream commit 2: Date: Tue, 7 Oct 2014 22:24:42 +0800 [VAR] Use setvareq to set OPTIND initially There is no need to setvarint to set the initial value of OPTIND of one. This patch switchs to setvareq which also lets us avoid an unnecessary memory allocation. Signed-off-by: Herbert Xu <herbert@gondor.apana.org.au> Signed-off-by: Denys Vlasenko <vda.linux@googlemail.com>
Diffstat (limited to 'shell/ash.c')
-rw-r--r--shell/ash.c4
1 files changed, 3 insertions, 1 deletions
diff --git a/shell/ash.c b/shell/ash.c
index 9fd1b55e2..a7c03bbc2 100644
--- a/shell/ash.c
+++ b/shell/ash.c
@@ -1919,7 +1919,7 @@ static const struct {
1919 { VSTRFIXED|VTEXTFIXED , "PS2=> " , NULL }, 1919 { VSTRFIXED|VTEXTFIXED , "PS2=> " , NULL },
1920 { VSTRFIXED|VTEXTFIXED , "PS4=+ " , NULL }, 1920 { VSTRFIXED|VTEXTFIXED , "PS4=+ " , NULL },
1921#if ENABLE_ASH_GETOPTS 1921#if ENABLE_ASH_GETOPTS
1922 { VSTRFIXED|VTEXTFIXED , "OPTIND=1" , getoptsreset }, 1922 { VSTRFIXED|VTEXTFIXED , defoptindvar, getoptsreset },
1923#endif 1923#endif
1924#if ENABLE_ASH_RANDOM_SUPPORT 1924#if ENABLE_ASH_RANDOM_SUPPORT
1925 { VSTRFIXED|VTEXTFIXED|VUNSET|VDYNAMIC, "RANDOM", change_random }, 1925 { VSTRFIXED|VTEXTFIXED|VUNSET|VDYNAMIC, "RANDOM", change_random },
@@ -13124,6 +13124,8 @@ init(void)
13124 } 13124 }
13125 } 13125 }
13126 13126
13127 setvareq((char*)defoptindvar, VTEXTFIXED);
13128
13127 setvar0("PPID", utoa(getppid())); 13129 setvar0("PPID", utoa(getppid()));
13128#if ENABLE_ASH_BASH_COMPAT 13130#if ENABLE_ASH_BASH_COMPAT
13129 p = lookupvar("SHLVL"); 13131 p = lookupvar("SHLVL");