Provide two different function pointers for option function callbacks. This
authorjsing <jsing@openbsd.org>
Sun, 28 Dec 2014 14:21:42 +0000 (14:21 +0000)
committerjsing <jsing@openbsd.org>
Sun, 28 Dec 2014 14:21:42 +0000 (14:21 +0000)
allows for simpler code in the common cases and will allow for further
extension to support the complex cases.

usr.bin/openssl/apps.c
usr.bin/openssl/apps.h
usr.bin/openssl/ecparam.c
usr.bin/openssl/version.c

index 009f486..47c418f 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: apps.c,v 1.14 2014/12/14 14:42:06 jsing Exp $ */
+/* $OpenBSD: apps.c,v 1.15 2014/12/28 14:21:42 jsing Exp $ */
 /*
  * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
  *
@@ -2298,7 +2298,7 @@ options_parse(int argc, char **argv, struct option *opts, char **unnamed)
                                break;
 
                        case OPTION_ARG_FUNC:
-                               if (opt->func(opt, argv[i]) != 0)
+                               if (opt->opt.argfunc(argv[i]) != 0)
                                        return (1);
                                break;
 
@@ -2314,7 +2314,7 @@ options_parse(int argc, char **argv, struct option *opts, char **unnamed)
                                break;
 
                        case OPTION_FUNC:
-                               if (opt->func(opt, NULL) != 0)
+                               if (opt->opt.func() != 0)
                                        return (1);
                                break;
 
index b2b7e85..b069d2d 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: apps.h,v 1.9 2014/12/14 14:42:06 jsing Exp $ */
+/* $OpenBSD: apps.h,v 1.10 2014/12/28 14:21:42 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -296,10 +296,11 @@ struct option {
        } type;
        union {
                char **arg;
+               int (*argfunc)(char *arg);
                int *flag;
+               int (*func)(void);
                int *value;
        } opt;
-       int (*func)(struct option *opt, char *arg);
        const int value;
 };
 
index 1441fa7..57797a8 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: ecparam.c,v 1.6 2014/12/14 14:45:33 jsing Exp $ */
+/* $OpenBSD: ecparam.c,v 1.7 2014/12/28 14:21:42 jsing Exp $ */
 /*
  * Written by Nils Larsch for the OpenSSL project.
  */
@@ -111,7 +111,7 @@ static struct {
 } ecparam_config;
 
 static int
-ecparam_opt_form(struct option *opt, char *arg)
+ecparam_opt_form(char *arg)
 {
        if (strcmp(arg, "compressed") == 0)
                ecparam_config.form = POINT_CONVERSION_COMPRESSED;
@@ -127,7 +127,7 @@ ecparam_opt_form(struct option *opt, char *arg)
 }
 
 static int
-ecparam_opt_enctype(struct option *opt, char *arg)
+ecparam_opt_enctype(char *arg)
 {
        if (strcmp(arg, "explicit") == 0)
                ecparam_config.asn1_flag = 0;
@@ -159,7 +159,7 @@ struct option ecparam_options[] = {
                .desc = "Specify point conversion form:\n"
                    "  compressed, uncompressed (default), hybrid",
                .type = OPTION_ARG_FUNC,
-               .func = ecparam_opt_form,
+               .opt.argfunc = ecparam_opt_form,
        },
 #ifndef OPENSSL_NO_ENGINE
        {
@@ -237,7 +237,7 @@ struct option ecparam_options[] = {
                .desc = "Specify EC parameter ASN.1 encoding type:\n"
                    "  explicit, named_curve (default)",
                .type = OPTION_ARG_FUNC,
-               .func = ecparam_opt_enctype,
+               .opt.argfunc = ecparam_opt_enctype,
        },
        {
                .name = "text",
index db9c98e..953d0c3 100644 (file)
@@ -1,4 +1,4 @@
-/* $OpenBSD: version.c,v 1.3 2014/10/13 02:46:14 bcook Exp $ */
+/* $OpenBSD: version.c,v 1.4 2014/12/28 14:21:42 jsing Exp $ */
 /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com)
  * All rights reserved.
  *
@@ -145,7 +145,7 @@ static struct {
 } version_config;
 
 static int
-version_all_opts(struct option *opt, char *arg)
+version_all_opts(void)
 {
        version_config.cflags = 1;
        version_config.date = 1;
@@ -162,7 +162,7 @@ static struct option version_options[] = {
                .name = "a",
                .desc = "All information (same as setting all other flags)",
                .type = OPTION_FUNC,
-               .func = version_all_opts,
+               .opt.func = version_all_opts,
        },
        {
                .name = "b",