summary refs log tree commit diff
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2013-08-23 21:27:42 +1000
committerHerbert Xu <herbert@gondor.apana.org.au>2013-08-23 21:27:42 +1000
commita14c418aee9d4ccd7cf888024e318b300173099f (patch)
tree6d767ed945497fc9653b86a68461620d8d5308ae
parent[VAR] Add newline when tracing in poplocalvars (diff)
downloaddash-a14c418aee9d4ccd7cf888024e318b300173099f.tar.gz
dash-a14c418aee9d4ccd7cf888024e318b300173099f.zip
[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>
-rw-r--r--ChangeLog1
-rw-r--r--src/var.c2
2 files changed, 3 insertions, 0 deletions
diff --git a/ChangeLog b/ChangeLog
index 9500c87..4276676 100644
--- a/ChangeLog
+++ b/ChangeLog
@@ -1,6 +1,7 @@
 2013-08-23  Herbert Xu <herbert@gondor.apana.org.au>
 
 	* Propagate EXP_QPAT in subevalvar.
+	* Initialise OPTIND after importing environment.
 
 2013-03-12  Peter Rosin <peda@lysator.liu.se>
 
diff --git a/src/var.c b/src/var.c
index c35e925..fa24854 100644
--- a/src/var.c
+++ b/src/var.c
@@ -142,6 +142,8 @@ INIT {
 		}
 	}
 
+	setvarint("OPTIND", 1, 0);
+
 	fmtstr(ppid + 5, sizeof(ppid) - 5, "%ld", (long) getppid());
 	setvareq(ppid, VTEXTFIXED);