diff options
| -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 |
