From beba0da1f69717d462ce646ef5a6c92fbce8b667 Mon Sep 17 00:00:00 2001 From: jsing Date: Sun, 28 Dec 2014 15:48:52 +0000 Subject: [PATCH] Provide a mechanism for option parsing to return the number of arguments that it has consumed. This allows for the handling of multiple unnamed arguments, including lists of filenames. --- usr.bin/openssl/apps.c | 11 +++++++++-- usr.bin/openssl/apps.h | 5 +++-- usr.bin/openssl/crl.c | 4 ++-- usr.bin/openssl/ecparam.c | 4 ++-- usr.bin/openssl/prime.c | 4 ++-- usr.bin/openssl/rand.c | 4 ++-- usr.bin/openssl/version.c | 4 ++-- 7 files changed, 22 insertions(+), 14 deletions(-) diff --git a/usr.bin/openssl/apps.c b/usr.bin/openssl/apps.c index 506e421cc12..7c774e40776 100644 --- a/usr.bin/openssl/apps.c +++ b/usr.bin/openssl/apps.c @@ -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 * @@ -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: diff --git a/usr.bin/openssl/apps.h b/usr.bin/openssl/apps.h index b069d2d29bf..c448e85d879 100644 --- a/usr.bin/openssl/apps.h +++ b/usr.bin/openssl/apps.h @@ -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 diff --git a/usr.bin/openssl/crl.c b/usr.bin/openssl/crl.c index 0391e6e4dc0..2b6a4a3e5df 100644 --- a/usr.bin/openssl/crl.c +++ b/usr.bin/openssl/crl.c @@ -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; } diff --git a/usr.bin/openssl/ecparam.c b/usr.bin/openssl/ecparam.c index 57797a8e4e6..c958c1f51b2 100644 --- a/usr.bin/openssl/ecparam.c +++ b/usr.bin/openssl/ecparam.c @@ -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; } diff --git a/usr.bin/openssl/prime.c b/usr.bin/openssl/prime.c index d9237f9070a..fca3701632c 100644 --- a/usr.bin/openssl/prime.c +++ b/usr.bin/openssl/prime.c @@ -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); } diff --git a/usr.bin/openssl/rand.c b/usr.bin/openssl/rand.c index 6de2208b425..eccf4dee866 100644 --- a/usr.bin/openssl/rand.c +++ b/usr.bin/openssl/rand.c @@ -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); } diff --git a/usr.bin/openssl/version.c b/usr.bin/openssl/version.c index 953d0c3afea..2e28fa4345b 100644 --- a/usr.bin/openssl/version.c +++ b/usr.bin/openssl/version.c @@ -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); } -- 2.20.1