Commit Diff


commit - b45ef13d08286e9dfb77fdad14c845885535f0b7
commit + c3465169d316c7a08fe3d1d2dffc5a0bb72d189b
blob - c4d1e1fad4add26b371a08609689fe243cdd6866
blob + 234fc31e30c9c0ee56f9ef045acdb1fbe2370a72
--- identity.c
+++ identity.c
@@ -112,23 +112,28 @@ int
 main(int argc, char **argv)
 {
 	const struct cmd	*cmd;
-	int			 ch;
 	size_t			 i;
 
-	while ((ch = getopt(argc, argv, "")) != -1) {
-		switch (ch) {
-		default:
-			usage();
-		}
-	}
-	argc -= optind;
-	argv += optind;
-	optind = 0;
-	optreset = 1;
+	/*
+	 * Can't use portably getopt() since there's no cross-platform
+	 * way of resetting it.
+	 */
 
 	if (argc == 0)
 		usage();
+	argc--, argv++;
 
+	if (argc == 0)
+		usage();
+
+	if (!strcmp(*argv, "--"))
+		argc--, argv++;
+	else if (**argv == '-')
+		usage();
+
+	if (argc == 0)
+		usage();
+
 	for (i = 0; i < nitems(cmds); ++i) {
 		cmd = &cmds[i];