diff options
Diffstat (limited to '')
| -rw-r--r-- | src/usr.bin/openssl/apps.c | 97 |
1 files changed, 96 insertions, 1 deletions
diff --git a/src/usr.bin/openssl/apps.c b/src/usr.bin/openssl/apps.c index ac1c5107f1..e5eda3f53b 100644 --- a/src/usr.bin/openssl/apps.c +++ b/src/usr.bin/openssl/apps.c | |||
| @@ -1,4 +1,19 @@ | |||
| 1 | /* $OpenBSD: apps.c,v 1.1 2014/08/26 17:47:24 jsing Exp $ */ | 1 | /* $OpenBSD: apps.c,v 1.2 2014/08/27 14:59:44 jsing Exp $ */ |
| 2 | /* | ||
| 3 | * Copyright (c) 2014 Joel Sing <jsing@openbsd.org> | ||
| 4 | * | ||
| 5 | * Permission to use, copy, modify, and distribute this software for any | ||
| 6 | * purpose with or without fee is hereby granted, provided that the above | ||
| 7 | * copyright notice and this permission notice appear in all copies. | ||
| 8 | * | ||
| 9 | * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES | ||
| 10 | * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF | ||
| 11 | * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR | ||
| 12 | * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES | ||
| 13 | * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN | ||
| 14 | * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF | ||
| 15 | * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. | ||
| 16 | */ | ||
| 2 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) | 17 | /* Copyright (C) 1995-1998 Eric Young (eay@cryptsoft.com) |
| 3 | * All rights reserved. | 18 | * All rights reserved. |
| 4 | * | 19 | * |
| @@ -2218,3 +2233,83 @@ app_isdir(const char *name) | |||
| 2218 | return S_ISDIR(st.st_mode); | 2233 | return S_ISDIR(st.st_mode); |
| 2219 | return -1; | 2234 | return -1; |
| 2220 | } | 2235 | } |
| 2236 | |||
| 2237 | void | ||
| 2238 | options_usage(struct option *opts) | ||
| 2239 | { | ||
| 2240 | const char *argname; | ||
| 2241 | char buf[32]; | ||
| 2242 | int i; | ||
| 2243 | |||
| 2244 | for (i = 0; opts[i].name != NULL; i++) { | ||
| 2245 | if (opts[i].desc == NULL) | ||
| 2246 | continue; | ||
| 2247 | argname = (opts[i].argname != NULL) ? opts[i].argname : ""; | ||
| 2248 | snprintf(buf, sizeof(buf), "-%s %s", opts[i].name, argname); | ||
| 2249 | fprintf(stderr, " %-*s %s\n", 14, buf, opts[i].desc); | ||
| 2250 | } | ||
| 2251 | } | ||
| 2252 | |||
| 2253 | int | ||
| 2254 | options_parse(int argc, char **argv, struct option *opts, char **unnamed) | ||
| 2255 | { | ||
| 2256 | struct option *opt; | ||
| 2257 | char *arg, *p; | ||
| 2258 | int i, j; | ||
| 2259 | |||
| 2260 | for (i = 1; i < argc; i++) { | ||
| 2261 | p = arg = argv[i]; | ||
| 2262 | |||
| 2263 | if (*p++ != '-') { | ||
| 2264 | if (unnamed == NULL) | ||
| 2265 | goto unknown; | ||
| 2266 | *unnamed = arg; | ||
| 2267 | continue; | ||
| 2268 | } | ||
| 2269 | if (*p == '\0') | ||
| 2270 | goto unknown; | ||
| 2271 | |||
| 2272 | for (j = 0; opts[j].name != NULL; j++) { | ||
| 2273 | opt = &opts[j]; | ||
| 2274 | if (strcmp(p, opt->name) != 0) | ||
| 2275 | continue; | ||
| 2276 | |||
| 2277 | switch (opt->type) { | ||
| 2278 | case OPTION_ARG: | ||
| 2279 | if (++i >= argc) { | ||
| 2280 | fprintf(stderr, | ||
| 2281 | "missing %s argument for -%s\n", | ||
| 2282 | opt->argname, opt->name); | ||
| 2283 | return (1); | ||
| 2284 | } | ||
| 2285 | *opt->opt.arg = argv[i]; | ||
| 2286 | break; | ||
| 2287 | |||
| 2288 | case OPTION_FLAG: | ||
| 2289 | *opt->opt.flag = 1; | ||
| 2290 | break; | ||
| 2291 | |||
| 2292 | case OPTION_VALUE: | ||
| 2293 | *opt->opt.value = opt->value; | ||
| 2294 | break; | ||
| 2295 | |||
| 2296 | default: | ||
| 2297 | fprintf(stderr, | ||
| 2298 | "option %s - unknown type %i\n", | ||
| 2299 | opt->name, opt->type); | ||
| 2300 | return (1); | ||
| 2301 | } | ||
| 2302 | |||
| 2303 | break; | ||
| 2304 | } | ||
| 2305 | |||
| 2306 | if (opts[j].name == NULL) | ||
| 2307 | goto unknown; | ||
| 2308 | } | ||
| 2309 | |||
| 2310 | return (0); | ||
| 2311 | |||
| 2312 | unknown: | ||
| 2313 | fprintf(stderr, "unknown option '%s'\n", arg); | ||
| 2314 | return (1); | ||
| 2315 | } | ||
