aboutsummaryrefslogtreecommitdiff
path: root/bin
diff options
context:
space:
mode:
authorJilles Tjoelker <jilles@FreeBSD.org>2014-10-28 22:14:31 +0000
committerJilles Tjoelker <jilles@FreeBSD.org>2014-10-28 22:14:31 +0000
commit3fb51b3a438b5174b29d15021f6c296e385a81f7 (patch)
treebff51b62df045acab93fc518d065dddfe5e233c3 /bin
parent01e1933dcccd319205d2540d366e8fa03e4e1723 (diff)
Notes
Diffstat (limited to 'bin')
-rw-r--r--bin/sh/expand.c13
-rw-r--r--bin/sh/tests/parameters/Makefile2
-rw-r--r--bin/sh/tests/parameters/positional6.07
-rw-r--r--bin/sh/tests/parameters/positional7.08
4 files changed, 25 insertions, 5 deletions
diff --git a/bin/sh/expand.c b/bin/sh/expand.c
index e0be64ae4cdd..0a9d32930530 100644
--- a/bin/sh/expand.c
+++ b/bin/sh/expand.c
@@ -878,7 +878,7 @@ varvalue(const char *name, int quoted, int subtype, int flag)
int num;
char *p;
int i;
- char sep;
+ char sep[2];
char **ap;
switch (*name) {
@@ -912,15 +912,18 @@ varvalue(const char *name, int quoted, int subtype, int flag)
/* FALLTHROUGH */
case '*':
if (ifsset())
- sep = ifsval()[0];
+ sep[0] = ifsval()[0];
else
- sep = ' ';
+ sep[0] = ' ';
+ sep[1] = '\0';
for (ap = shellparam.p ; (p = *ap++) != NULL ; ) {
strtodest(p, flag, subtype, quoted);
if (!*ap)
break;
- if (sep || (flag & EXP_FULL && !quoted && **ap != '\0'))
- STPUTC(sep, expdest);
+ if (sep[0])
+ strtodest(sep, flag, subtype, quoted);
+ else if (flag & EXP_FULL && !quoted && **ap != '\0')
+ STPUTC('\0', expdest);
}
return;
default:
diff --git a/bin/sh/tests/parameters/Makefile b/bin/sh/tests/parameters/Makefile
index 47165290425f..231ed4dbb79d 100644
--- a/bin/sh/tests/parameters/Makefile
+++ b/bin/sh/tests/parameters/Makefile
@@ -18,6 +18,8 @@ FILES+= positional2.0
FILES+= positional3.0
FILES+= positional4.0
FILES+= positional5.0
+FILES+= positional6.0
+FILES+= positional7.0
FILES+= pwd1.0
FILES+= pwd2.0
diff --git a/bin/sh/tests/parameters/positional6.0 b/bin/sh/tests/parameters/positional6.0
new file mode 100644
index 000000000000..1410668b8a9f
--- /dev/null
+++ b/bin/sh/tests/parameters/positional6.0
@@ -0,0 +1,7 @@
+# $FreeBSD$
+
+IFS=?
+set p r
+v=pqrs
+r=${v#"$*"}
+[ "$r" = pqrs ]
diff --git a/bin/sh/tests/parameters/positional7.0 b/bin/sh/tests/parameters/positional7.0
new file mode 100644
index 000000000000..f170ad343996
--- /dev/null
+++ b/bin/sh/tests/parameters/positional7.0
@@ -0,0 +1,8 @@
+# $FreeBSD$
+
+set -- / ''
+IFS=*
+set -- "$*"
+IFS=:
+args="$*"
+[ "$#:$args" = "1:/*" ]