summaryrefslogtreecommitdiffstats
path: root/tools
diff options
context:
space:
mode:
authorjilles <jilles@FreeBSD.org>2010-05-28 22:40:24 +0000
committerjilles <jilles@FreeBSD.org>2010-05-28 22:40:24 +0000
commitc5fcbff43a2eb7923cdded83de0b4529deba1ca1 (patch)
tree5a790475e2c817e156e002a6faead7c8f13cc265 /tools
parentbb4be30b2dbb8dae012830d33db99d965bf90222 (diff)
downloadFreeBSD-src-c5fcbff43a2eb7923cdded83de0b4529deba1ca1.zip
FreeBSD-src-c5fcbff43a2eb7923cdded83de0b4529deba1ca1.tar.gz
sh: Recognize "--" in . and exec.
Although "--" historically has not been required to be recognized for certain special builtins that do not take options in POSIX, some other implementations recognize options for them, requiring scripts to use "--" or avoid operands starting with "-". Operands starting with "-" can be avoided with eval by prepending a space, and cannot occur with break, continue, exit, return and shift as they only take numbers, nor with times as it does not take operands. With . and exec, avoiding "-" is not so easy as it may require reimplementing the PATH search; therefore the current proposal for POSIX is to require recognition of "--" for them. We continue to accept other strings starting with "-" as operands to . and exec, and also "--" if it is alone to . (which would otherwise be invalid anyway).
Diffstat (limited to 'tools')
-rw-r--r--tools/regression/bin/sh/builtins/dot2.021
-rw-r--r--tools/regression/bin/sh/builtins/exec2.025
2 files changed, 46 insertions, 0 deletions
diff --git a/tools/regression/bin/sh/builtins/dot2.0 b/tools/regression/bin/sh/builtins/dot2.0
new file mode 100644
index 0000000..ed6379b
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/dot2.0
@@ -0,0 +1,21 @@
+# $FreeBSD$
+
+failures=
+failure() {
+ echo "Error at line $1" >&2
+ failures=x$failures
+}
+
+T=$(mktemp -d ${TMPDIR:-/tmp}/sh-test.XXXXXX) || exit
+trap 'rm -rf $T' 0
+cd $T || exit 3
+unset x
+echo 'x=2' >testscript
+. -- ./testscript
+[ "$x" = 2 ] || failure $LINENO
+cd / || exit 3
+x=1
+PATH=$T:$PATH . -- testscript
+[ "$x" = 2 ] || failure $LINENO
+
+test -z "$failures"
diff --git a/tools/regression/bin/sh/builtins/exec2.0 b/tools/regression/bin/sh/builtins/exec2.0
new file mode 100644
index 0000000..a04bf34
--- /dev/null
+++ b/tools/regression/bin/sh/builtins/exec2.0
@@ -0,0 +1,25 @@
+# $FreeBSD$
+
+failures=
+failure() {
+ echo "Error at line $1" >&2
+ failures=x$failures
+}
+
+(
+ exec -- >/dev/null
+ echo bad
+)
+[ $? = 0 ] || failure $LINENO
+(
+ exec -- sh -c 'exit 42'
+ echo bad
+)
+[ $? = 42 ] || failure $LINENO
+(
+ exec -- /var/empty/nosuch
+ echo bad
+) 2>/dev/null
+[ $? = 127 ] || failure $LINENO
+
+test -z "$failures"
OpenPOWER on IntegriCloud