diff options
| author | Andy Fiddaman <omnios@citrus-it.co.uk> | 2021-03-22 15:36:58 +0000 |
|---|---|---|
| committer | Andy Fiddaman <omnios@citrus-it.co.uk> | 2021-03-25 20:24:46 +0000 |
| commit | 89af4c7b28b4436849bcbafbdebd243918ee0969 (patch) | |
| tree | 4f52370a874e84ed890a0fe64f6080104ec24e7e /usr/src | |
| parent | e49fc96399e3e599d5736b0968a49892988d60b3 (diff) | |
| download | illumos-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.c | 9 | ||||
| -rwxr-xr-x | usr/src/contrib/ast/src/cmd/ksh93/tests/builtins.sh | 12 |
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 |
