summaryrefslogtreecommitdiff
path: root/src/usr.bin/openssl/apps.c
diff options
context:
space:
mode:
Diffstat (limited to '')
-rw-r--r--src/usr.bin/openssl/apps.c97
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
2237void
2238options_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
2253int
2254options_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
2312unknown:
2313 fprintf(stderr, "unknown option '%s'\n", arg);
2314 return (1);
2315}