X-Git-Url: https://git.openssl.org/gitweb/?p=openssl.git;a=blobdiff_plain;f=apps%2Fopenssl.c;h=fffa05e1c7a1af719461221afed020b307bd8543;hp=2cb49cbb3551e77da9c8ddb78761b9cbfb3f2bdc;hb=ebc0168384e9bbc29c02b85adb01036609769761;hpb=0488c0bbbe87eee3a800797b91350c653e9f1711 diff --git a/apps/openssl.c b/apps/openssl.c index 2cb49cbb35..fffa05e1c7 100644 --- a/apps/openssl.c +++ b/apps/openssl.c @@ -1,5 +1,5 @@ /* - * Copyright 1995-2017 The OpenSSL Project Authors. All Rights Reserved. + * Copyright 1995-2018 The OpenSSL Project Authors. All Rights Reserved. * * Licensed under the OpenSSL license (the "License"). You may not use * this file except in compliance with the License. You can obtain a copy @@ -27,8 +27,9 @@ #ifdef OPENSSL_SYS_VMS # include #endif -#define INCLUDE_FUNCTION_TABLE #include "apps.h" +#define INCLUDE_FUNCTION_TABLE +#include "progs.h" /* Structure to hold the number of columns to be displayed and the * field width used to display them. @@ -92,6 +93,7 @@ static int apps_startup() static void apps_shutdown() { destroy_ui_method(); + destroy_prefix_method(); } static char *make_config_name() @@ -442,6 +444,8 @@ typedef enum HELP_CHOICE { } HELP_CHOICE; const OPTIONS help_options[] = { + {OPT_HELP_STR, 1, '-', "Usage: help [options]\n"}, + {OPT_HELP_STR, 1, '-', " help [command]\n"}, {"help", OPT_hHELP, '-', "Display this summary"}, {NULL} }; @@ -469,6 +473,14 @@ int help_main(int argc, char **argv) } } + if (opt_num_rest() == 1) { + char *new_argv[3]; + + new_argv[0] = opt_rest()[0]; + new_argv[1] = "--help"; + new_argv[2] = NULL; + return do_cmd(prog_init(), 2, new_argv); + } if (opt_num_rest() != 0) { BIO_printf(bio_err, "Usage: %s\n", prog); return 1; @@ -787,12 +799,19 @@ static void list_disabled(void) static LHASH_OF(FUNCTION) *prog_init(void) { - LHASH_OF(FUNCTION) *ret; + static LHASH_OF(FUNCTION) *ret = NULL; + static int prog_inited = 0; FUNCTION *f; size_t i; + if (prog_inited) + return ret; + + prog_inited = 1; + /* Sort alphabetically within category. For nicer help displays. */ - for (i = 0, f = functions; f->name != NULL; ++f, ++i) ; + for (i = 0, f = functions; f->name != NULL; ++f, ++i) + ; qsort(functions, i, sizeof(*functions), SortFnByName); if ((ret = lh_FUNCTION_new(function_hash, function_cmp)) == NULL)