summaryrefslogtreecommitdiff
path: root/usr/src
diff options
context:
space:
mode:
authorAndy Fiddaman <omnios@citrus-it.co.uk>2021-03-22 15:36:58 +0000
committerAndy Fiddaman <omnios@citrus-it.co.uk>2021-03-25 20:24:46 +0000
commit89af4c7b28b4436849bcbafbdebd243918ee0969 (patch)
tree4f52370a874e84ed890a0fe64f6080104ec24e7e /usr/src
parente49fc96399e3e599d5736b0968a49892988d60b3 (diff)
downloadillumos-joyent-89af4c7b28b4436849bcbafbdebd243918ee0969.tar.gz
13661 printf builtin should ignore leading --
Reviewed by: Robert Mustacchi <rm@fingolfin.org> Reviewed by: Dominik Hassler <hadfl@omnios.org> Approved by: Rich Lowe <richlowe@richlowe.net>
Diffstat (limited to 'usr/src')
-rw-r--r--usr/src/contrib/ast/src/cmd/ksh93/bltins/print.c9
-rwxr-xr-xusr/src/contrib/ast/src/cmd/ksh93/tests/builtins.sh12
2 files changed, 20 insertions, 1 deletions
diff --git a/usr/src/contrib/ast/src/cmd/ksh93/bltins/print.c b/usr/src/contrib/ast/src/cmd/ksh93/bltins/print.c
index 93e4ac3ebd..c5121cfb35 100644
--- a/usr/src/contrib/ast/src/cmd/ksh93/bltins/print.c
+++ b/usr/src/contrib/ast/src/cmd/ksh93/bltins/print.c
@@ -21,7 +21,7 @@
/*
* echo [arg...]
* print [-nrps] [-f format] [-u filenum] [arg...]
- * printf format [arg...]
+ * printf [--] format [arg...]
*
* David Korn
* AT&T Labs
@@ -199,6 +199,13 @@ int b_print(int argc, char *argv[], Shbltin_t *context)
goto skip;
}
argv++;
+ /*
+ * POSIX says: Standard utilities that do not accept options,
+ * but that do accept operands, shall recognise "--" as a
+ * first argument to be discarded.
+ */
+ if (argv[0] != NULL && strcmp(argv[0], "--") == 0)
+ argv++;
goto printf;
}
while((n = optget(argv,options))) switch(n)
diff --git a/usr/src/contrib/ast/src/cmd/ksh93/tests/builtins.sh b/usr/src/contrib/ast/src/cmd/ksh93/tests/builtins.sh
index 1d24904e76..33eba61fc0 100755
--- a/usr/src/contrib/ast/src/cmd/ksh93/tests/builtins.sh
+++ b/usr/src/contrib/ast/src/cmd/ksh93/tests/builtins.sh
@@ -213,6 +213,18 @@ do if (( $(( ${base[$i]}$(printf "%$i" $n) )) != n ))
then err_exit "printf %$i not working"
fi
done
+if [[ $(printf -eexist) != -eexist ]]
+then err_exit 'printf -eexist ... not working'
+fi
+if [[ $(printf -- "%s" foo) != foo ]]
+then err_exit 'printf -- not working'
+fi
+if [[ $(printf -- --) != -- ]]
+then err_exit 'printf -- -- ... not working'
+fi
+if [[ $(printf -- -eexist) != -eexist ]]
+then err_exit 'printf -- -eexist. not working'
+fi
if [[ $( trap 'print done' EXIT) != done ]]
then err_exit 'trap on EXIT not working'
fi