summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-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