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