Module Name:    src
Committed By:   christos
Date:           Sun Nov 28 02:07:02 UTC 2021

Modified Files:
        src/usr.bin/xlint/xlint: xlint.c

Log Message:
Explain the usage errors.


To generate a diff of this commit:
cvs rdiff -u -r1.84 -r1.85 src/usr.bin/xlint/xlint/xlint.c

Please note that diffs are not public domain; they are subject to the
copyright notices on the relevant files.

Modified files:

Index: src/usr.bin/xlint/xlint/xlint.c
diff -u src/usr.bin/xlint/xlint/xlint.c:1.84 src/usr.bin/xlint/xlint/xlint.c:1.85
--- src/usr.bin/xlint/xlint/xlint.c:1.84	Sun Nov 21 05:39:47 2021
+++ src/usr.bin/xlint/xlint/xlint.c	Sat Nov 27 21:07:02 2021
@@ -1,4 +1,4 @@
-/* $NetBSD: xlint.c,v 1.84 2021/11/21 10:39:47 rillig Exp $ */
+/* $NetBSD: xlint.c,v 1.85 2021/11/28 02:07:02 christos Exp $ */
 
 /*
  * Copyright (c) 1996 Christopher G. Demetriou.  All Rights Reserved.
@@ -38,7 +38,7 @@
 
 #include <sys/cdefs.h>
 #if defined(__RCSID) && !defined(lint)
-__RCSID("$NetBSD: xlint.c,v 1.84 2021/11/21 10:39:47 rillig Exp $");
+__RCSID("$NetBSD: xlint.c,v 1.85 2021/11/28 02:07:02 christos Exp $");
 #endif
 
 #include <sys/param.h>
@@ -46,6 +46,7 @@ __RCSID("$NetBSD: xlint.c,v 1.84 2021/11
 #include <sys/stat.h>
 #include <sys/utsname.h>
 #include <errno.h>
+#include <stdarg.h>
 #include <fcntl.h>
 #include <paths.h>
 #include <signal.h>
@@ -299,13 +300,20 @@ lbasename(const char *strg, int delim)
 	return *cp1 == '\0' ? cp2 : cp1;
 }
 
-static void __attribute__((noreturn))
-usage(void)
+static void __attribute__((__noreturn__, __format__(__printf__, 1, 2)))
+usage(const char *fmt, ...)
 {
 	const char *name;
 	int indent;
+	va_list ap;
 
 	name = getprogname();
+	fprintf(stderr, "%s: ", name);
+	va_start(ap, fmt);
+	vfprintf(stderr, fmt, ap);
+	va_end(ap);
+	fprintf(stderr, "\n");
+
 	indent = (int)(strlen("usage: ") + strlen(name));
 	(void)fprintf(stderr,
 	    "usage: %s [-abceghprvwxzHFST] [-s|-t] [-i|-nu]\n"
@@ -412,7 +420,8 @@ main(int argc, char *argv[])
 
 		case 'i':
 			if (Cflag)
-				usage();
+				usage("%c and %s flags cannot be specified "
+				    "together", 'C', "i");
 			iflag = true;
 			break;
 
@@ -430,7 +439,8 @@ main(int argc, char *argv[])
 
 		case 's':
 			if (tflag)
-				usage();
+				usage("%c and %s flags cannot be specified "
+				    "together", 's', "t");
 			list_clear(&cpp.lcflags);
 			list_add(&cpp.lcflags, "-trigraphs");
 			list_add(&cpp.lcflags, "-Wtrigraphs");
@@ -443,7 +453,8 @@ main(int argc, char *argv[])
 
 		case 'S':
 			if (tflag)
-				usage();
+				usage("%c and %s flags cannot be specified "
+				    "together", 'S', "t");
 			pass_flag_to_lint1(c);
 			break;
 
@@ -455,7 +466,8 @@ main(int argc, char *argv[])
 #if !HAVE_NBTOOL_CONFIG_H
 		case 't':
 			if (sflag)
-				usage();
+				usage("%c and %s flags cannot be specified "
+				    "together", 's', "t");
 			tflag = true;
 			list_clear(&cpp.lcflags);
 			list_add(&cpp.lcflags, "-traditional");
@@ -473,8 +485,13 @@ main(int argc, char *argv[])
 			break;
 
 		case 'C':
-			if (Cflag || oflag || iflag)
-				usage();
+			if (Cflag)
+				usage("%c flag already specified", 'C');
+			usage("%c and %s flags cannot be specified "
+			    "together", 'C', "o or i");
+			if (oflag || iflag)
+				usage("%c and %s flags cannot be specified "
+				    "together", 'C', "o or i");
 			Cflag = true;
 			pass_flag_to_lint2(c);
 			pass_to_lint2(optarg);
@@ -484,7 +501,7 @@ main(int argc, char *argv[])
 
 		case 'd':
 			if (dflag)
-				usage();
+				usage("%c flag already specified", 'd');
 			dflag = true;
 			pass_to_cpp("-nostdinc");
 			pass_to_cpp("-isystem");
@@ -504,8 +521,11 @@ main(int argc, char *argv[])
 			break;
 
 		case 'o':
-			if (Cflag || oflag)
-				usage();
+			if (oflag)
+				usage("%c flag already specified", 'o');
+			if (Cflag)
+				usage("%c and %s flags cannot be specified "
+				    "together", 'C', "o");
 			oflag = true;
 			outputfn = xstrdup(optarg);
 			break;
@@ -527,7 +547,7 @@ main(int argc, char *argv[])
 			break;
 
 		default:
-			usage();
+			usage("Unknown flag %c", c);
 			/* NOTREACHED */
 		}
 	}
@@ -553,7 +573,7 @@ main(int argc, char *argv[])
 			else if (arg[1] == 'L')
 				list = &libsrchpath;
 			else {
-				usage();
+				usage("Unknown argument %s", arg);
 				/* NOTREACHED */
 			}
 
@@ -563,7 +583,7 @@ main(int argc, char *argv[])
 				argc--;
 				list_add(list, *++argv);
 			} else
-				usage();
+				usage("Missing argument for l or L");
 		} else {
 			/* filename */
 			fname(arg);
@@ -574,7 +594,7 @@ main(int argc, char *argv[])
 	}
 
 	if (first)
-		usage();
+		usage("Missing filename");
 
 	if (iflag)
 		terminate(0);

Reply via email to