summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/usr.bin/openssl/apps.c123
1 files changed, 58 insertions, 65 deletions
diff --git a/src/usr.bin/openssl/apps.c b/src/usr.bin/openssl/apps.c
index 47c418f424..c3bbab1684 100644
--- a/src/usr.bin/openssl/apps.c
+++ b/src/usr.bin/openssl/apps.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: apps.c,v 1.15 2014/12/28 14:21:42 jsing Exp $ */ 1/* $OpenBSD: apps.c,v 1.16 2014/12/28 14:50:15 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> 3 * Copyright (c) 2014 Joel Sing <jsing@openbsd.org>
4 * 4 *
@@ -2266,82 +2266,75 @@ options_parse(int argc, char **argv, struct option *opts, char **unnamed)
2266 2266
2267 for (j = 0; opts[j].name != NULL; j++) { 2267 for (j = 0; opts[j].name != NULL; j++) {
2268 opt = &opts[j]; 2268 opt = &opts[j];
2269 if (strcmp(p, opt->name) != 0) 2269 if (strcmp(p, opt->name) == 0)
2270 continue;
2271
2272 if (opt->type == OPTION_ARG ||
2273 opt->type == OPTION_ARG_FORMAT ||
2274 opt->type == OPTION_ARG_FUNC ||
2275 opt->type == OPTION_ARG_INT) {
2276 if (++i >= argc) {
2277 fprintf(stderr,
2278 "missing %s argument for -%s\n",
2279 opt->argname, opt->name);
2280 return (1);
2281 }
2282 }
2283
2284 switch (opt->type) {
2285 case OPTION_ARG:
2286 *opt->opt.arg = argv[i];
2287 break; 2270 break;
2271 }
2272 if (opts[j].name == NULL)
2273 goto unknown;
2288 2274
2289 case OPTION_ARG_FORMAT: 2275 if (opt->type == OPTION_ARG ||
2290 fmt = str2fmt(argv[i]); 2276 opt->type == OPTION_ARG_FORMAT ||
2291 if (fmt == FORMAT_UNDEF) { 2277 opt->type == OPTION_ARG_FUNC ||
2292 fprintf(stderr, 2278 opt->type == OPTION_ARG_INT) {
2293 "unknown %s '%s' for -%s\n", 2279 if (++i >= argc) {
2294 opt->argname, argv[i], opt->name); 2280 fprintf(stderr, "missing %s argument for -%s\n",
2295 return (1); 2281 opt->argname, opt->name);
2296 } 2282 return (1);
2297 *opt->opt.value = fmt; 2283 }
2298 break; 2284 }
2299 2285
2300 case OPTION_ARG_FUNC: 2286 switch (opt->type) {
2301 if (opt->opt.argfunc(argv[i]) != 0) 2287 case OPTION_ARG:
2302 return (1); 2288 *opt->opt.arg = argv[i];
2303 break; 2289 break;
2304 2290
2305 case OPTION_ARG_INT: 2291 case OPTION_ARG_FORMAT:
2306 val = strtonum(argv[i], 0, INT_MAX, &errstr); 2292 fmt = str2fmt(argv[i]);
2307 if (errstr != NULL) { 2293 if (fmt == FORMAT_UNDEF) {
2308 fprintf(stderr, 2294 fprintf(stderr, "unknown %s '%s' for -%s\n",
2309 "%s %s argument for -%s\n", 2295 opt->argname, argv[i], opt->name);
2310 errstr, opt->argname, opt->name); 2296 return (1);
2311 return (1); 2297 }
2312 } 2298 *opt->opt.value = fmt;
2313 *opt->opt.value = (int)val; 2299 break;
2314 break;
2315 2300
2316 case OPTION_FUNC: 2301 case OPTION_ARG_FUNC:
2317 if (opt->opt.func() != 0) 2302 if (opt->opt.argfunc(argv[i]) != 0)
2318 return (1); 2303 return (1);
2319 break; 2304 break;
2320 2305
2321 case OPTION_FLAG: 2306 case OPTION_ARG_INT:
2322 *opt->opt.flag = 1; 2307 val = strtonum(argv[i], 0, INT_MAX, &errstr);
2323 break; 2308 if (errstr != NULL) {
2309 fprintf(stderr, "%s %s argument for -%s\n",
2310 errstr, opt->argname, opt->name);
2311 return (1);
2312 }
2313 *opt->opt.value = (int)val;
2314 break;
2324 2315
2325 case OPTION_FLAG_ORD: 2316 case OPTION_FUNC:
2326 *opt->opt.flag = ++ord; 2317 if (opt->opt.func() != 0)
2327 break; 2318 return (1);
2319 break;
2328 2320
2329 case OPTION_VALUE: 2321 case OPTION_FLAG:
2330 *opt->opt.value = opt->value; 2322 *opt->opt.flag = 1;
2331 break; 2323 break;
2332 2324
2333 default: 2325 case OPTION_FLAG_ORD:
2334 fprintf(stderr, 2326 *opt->opt.flag = ++ord;
2335 "option %s - unknown type %i\n", 2327 break;
2336 opt->name, opt->type);
2337 return (1);
2338 }
2339 2328
2329 case OPTION_VALUE:
2330 *opt->opt.value = opt->value;
2340 break; 2331 break;
2341 }
2342 2332
2343 if (opts[j].name == NULL) 2333 default:
2344 goto unknown; 2334 fprintf(stderr, "option %s - unknown type %i\n",
2335 opt->name, opt->type);
2336 return (1);
2337 }
2345 } 2338 }
2346 2339
2347 return (0); 2340 return (0);