summary refs log tree commit diff
path: root/src/eval.c
diff options
context:
space:
mode:
authorHerbert Xu <herbert@gondor.apana.org.au>2007-10-15 20:24:28 +0800
committerHerbert Xu <herbert@gondor.apana.org.au>2007-10-15 20:24:28 +0800
commit03b4958dd49fda257c130d3fd9f1b6bafc00e36d (patch)
tree91c3aff84b78253b644853248ad6f4a685ebc3aa /src/eval.c
parent[BUILTIN] Use setvarint to set OPTIND (diff)
downloaddash-03b4958dd49fda257c130d3fd9f1b6bafc00e36d.tar.gz
dash-03b4958dd49fda257c130d3fd9f1b6bafc00e36d.zip
[EXEC] Fixed execing of scripts with no hash-bang
The function tryexec used the original name instead of the path found through
PATH search.  This patch fixes that.

Test case:

	trap 'rm -f $TMP' EXIT
	TMP=$(tempfile -s nosuchthing)

	cat <<- EOF > $TMP
		echo OK
	EOF
	chmod u+x $TMP

	cd /
	PATH=${TMP%/*} ${TMP##*/}

Old result:

	/bin/sh: Can't open filelgY4Fanosuchthing

New result:

	OK
Diffstat (limited to 'src/eval.c')
-rw-r--r--src/eval.c3
1 files changed, 2 insertions, 1 deletions
diff --git a/src/eval.c b/src/eval.c
index 2aa8317..1e0edd9 100644
--- a/src/eval.c
+++ b/src/eval.c
@@ -727,7 +727,8 @@ evalcommand(union node *cmd, int flags)
 			argc++;
 	}
 
-	argv = nargv = stalloc(sizeof (char *) * (argc + 1));
+	/* Reserve one extra spot at the front for shellexec. */
+	argv = nargv = stalloc(sizeof (char *) * (argc + 2)) + 1;
 	for (sp = arglist.list ; sp ; sp = sp->next) {
 		TRACE(("evalcommand arg: %s\n", sp->text));
 		*nargv++ = sp->text;