Provide a mechanism for option parsing to return the number of arguments
authorjsing <jsing@openbsd.org>
Sun, 28 Dec 2014 15:48:52 +0000 (15:48 +0000)
committerjsing <jsing@openbsd.org>
Sun, 28 Dec 2014 15:48:52 +0000 (15:48 +0000)
that it has consumed. This allows for the handling of multiple unnamed
arguments, including lists of filenames.

usr.bin/openssl/apps.c
usr.bin/openssl/apps.h
usr.bin/openssl/crl.c
usr.bin/openssl/ecparam.c
usr.bin/openssl/prime.c
usr.bin/openssl/rand.c
usr.bin/openssl/version.c

index 506e421..7c774e4 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: apps.c,v 1.17 2014/12/28 15:05:38 jsing Exp $ */
+/* $OpenBSD: apps.c,v 1.18 2014/12/28 15:48:52 jsing Exp $ */
 /*
  * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
  *
@@ -2242,7 +2242,8 @@ options_usage(struct option *opts)
 }
 
 int
-options_parse(int argc, char **argv, struct option *opts, char **unnamed)
+options_parse(int argc, char **argv, struct option *opts, char **unnamed,
+    int *argsused)
 {
        const char *errstr;
        struct option *opt;
@@ -2260,6 +2261,8 @@ options_parse(int argc, char **argv, struct option *opts, char **unnamed)
 
                /* Single unnamed argument (without leading hyphen). */
                if (*p++ != '-') {
+                       if (argsused != NULL)
+                               goto done;
                        if (unnamed == NULL)
                                goto unknown;
                        if (*unnamed != NULL)
@@ -2344,6 +2347,10 @@ options_parse(int argc, char **argv, struct option *opts, char **unnamed)
                }
        }
 
+done:
+       if (argsused != NULL)
+               *argsused = i;
+
        return (0);
 
 toomany:
index b069d2d..c448e85 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: apps.h,v 1.10 2014/12/28 14:21:42 jsing Exp $ */
+/* $OpenBSD: apps.h,v 1.11 2014/12/28 15:48:52 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -305,6 +305,7 @@ struct option {
 };
 
 void options_usage(struct option *opts);
-int options_parse(int argc, char **argv, struct option *opts, char **unnamed);
+int options_parse(int argc, char **argv, struct option *opts, char **unnamed,
+    int *argsused);
 
 #endif
index 0391e6e..2b6a4a3 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: crl.c,v 1.5 2014/10/13 02:46:14 bcook Exp $ */
+/* $OpenBSD: crl.c,v 1.6 2014/12/28 15:48:52 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -244,7 +244,7 @@ crl_main(int argc, char **argv)
        crl_config.informat = FORMAT_PEM;
        crl_config.outformat = FORMAT_PEM;
 
-       if (options_parse(argc, argv, crl_options, &digest_name) != 0) {
+       if (options_parse(argc, argv, crl_options, &digest_name, NULL) != 0) {
                crl_usage();
                goto end;
        }
index 57797a8..c958c1f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ecparam.c,v 1.7 2014/12/28 14:21:42 jsing Exp $ */
+/* $OpenBSD: ecparam.c,v 1.8 2014/12/28 15:48:52 jsing Exp $ */
 /*
  * Written by Nils Larsch for the OpenSSL project.
  */
@@ -277,7 +277,7 @@ ecparam_main(int argc, char **argv)
        ecparam_config.informat = FORMAT_PEM;
        ecparam_config.outformat = FORMAT_PEM;
 
-       if (options_parse(argc, argv, ecparam_options, NULL) != 0) {
+       if (options_parse(argc, argv, ecparam_options, NULL, NULL) != 0) {
                ecparam_usage();
                goto end;
        }
index d9237f9..fca3701 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: prime.c,v 1.3 2014/10/13 02:46:14 bcook Exp $ */
+/* $OpenBSD: prime.c,v 1.4 2014/12/28 15:48:52 jsing Exp $ */
 /* ====================================================================
  * Copyright (c) 2004 The OpenSSL Project.  All rights reserved.
  *
@@ -123,7 +123,7 @@ prime_main(int argc, char **argv)
        /* Default iterations for Miller-Rabin probabilistic primality test. */
        prime_config.checks = 20;
 
-       if (options_parse(argc, argv, prime_options, &prime) != 0) {
+       if (options_parse(argc, argv, prime_options, &prime, NULL) != 0) {
                prime_usage();
                return (1);
        }
index 6de2208..eccf4de 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: rand.c,v 1.5 2014/10/22 13:54:03 jsing Exp $ */
+/* $OpenBSD: rand.c,v 1.6 2014/12/28 15:48:52 jsing Exp $ */
 /* ====================================================================
  * Copyright (c) 1998-2001 The OpenSSL Project.  All rights reserved.
  *
@@ -123,7 +123,7 @@ rand_main(int argc, char **argv)
 
        memset(&rand_config, 0, sizeof(rand_config));
 
-       if (options_parse(argc, argv, rand_options, &num_bytes) != 0) {
+       if (options_parse(argc, argv, rand_options, &num_bytes, NULL) != 0) {
                rand_usage();
                return (1);
        }
index 953d0c3..2e28fa4 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: version.c,v 1.4 2014/12/28 14:21:42 jsing Exp $ */
+/* $OpenBSD: version.c,v 1.5 2014/12/28 15:48:52 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -217,7 +217,7 @@ version_main(int argc, char **argv)
 {
        memset(&version_config, 0, sizeof(version_config));
 
-       if (options_parse(argc, argv, version_options, NULL) != 0) {
+       if (options_parse(argc, argv, version_options, NULL, NULL) != 0) {
                version_usage();
                return (1);
        }