svn commit: r216423 - head/usr.bin/printf
Xin LI
delphij at FreeBSD.org
Tue Dec 14 01:16:56 UTC 2010
Author: delphij
Date: Tue Dec 14 01:16:56 2010
New Revision: 216423
URL: http://svn.freebsd.org/changeset/base/216423
Log:
IEEE Std 1003.1-2008, Section 1.4, Utility Description Defaults says
that when the options section is listed as "None", utility shall
recognize "--" as a first argument to be discarded.
This implementation is largely based on OpenBSD implementation but
we do slightly differently:
a) We skip argv[0] as the first step;
b) We test whether the next argument is "--" and ignore it.
With this change one will get:
%printf
usage: printf format [arguments ...]
%printf -v
-v%printf -- -v
-v%
%printf --
usage: printf format [arguments ...]
Which matches the behavior observed on a Debian system but different
from the Illumos change.
Modified:
head/usr.bin/printf/printf.c
Modified: head/usr.bin/printf/printf.c
==============================================================================
--- head/usr.bin/printf/printf.c Tue Dec 14 00:21:34 2010 (r216422)
+++ head/usr.bin/printf/printf.c Tue Dec 14 01:16:56 2010 (r216423)
@@ -102,7 +102,7 @@ int
main(int argc, char *argv[])
{
size_t len;
- int ch, chopped, end, rval;
+ int chopped, end, rval;
char *format, *fmt, *start;
#ifndef SHELL
@@ -111,15 +111,15 @@ main(int argc, char *argv[])
#ifdef SHELL
optreset = 1; optind = 1; opterr = 0; /* initialize getopt */
#endif
- while ((ch = getopt(argc, argv, "")) != -1)
- switch (ch) {
- case '?':
- default:
- usage();
- /* NOTREACHED */
- }
- argc -= optind;
- argv += optind;
+ /* Skip argv[0] which is the process name */
+ argv++;
+ argc--;
+
+ /* Need to accept/ignore "--" option. */
+ if (argc >= 1 && strcmp(*argv, "--") == 0) {
+ argc--;
+ argv++;
+ }
if (argc < 1) {
usage();
More information about the svn-src-head
mailing list