diff options
-rw-r--r-- | src/usr.bin/openssl/apps.c | 123 |
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); |