mirror of
https://github.com/openssl/openssl.git
synced 2025-02-23 14:42:15 +08:00
Determine the number of output columns for the list and help commands using
the command names rather than hard coding it (conditionally). Reviewed-by: Rich Salz <rsalz@openssl.org> (Merged from https://github.com/openssl/openssl/pull/4162)
This commit is contained in:
parent
121738d1cb
commit
296cbb5777
@ -30,14 +30,13 @@
|
||||
#define INCLUDE_FUNCTION_TABLE
|
||||
#include "apps.h"
|
||||
|
||||
|
||||
#ifdef OPENSSL_NO_CAMELLIA
|
||||
# define FORMAT "%-15s"
|
||||
# define COLUMNS 5
|
||||
#else
|
||||
# define FORMAT "%-18s"
|
||||
# define COLUMNS 4
|
||||
#endif
|
||||
/* Structure to hold the number of columns to be displayed and the
|
||||
* field width used to display them.
|
||||
*/
|
||||
typedef struct {
|
||||
int columns;
|
||||
int width;
|
||||
} DISPLAY_COLUMNS;
|
||||
|
||||
/* Special sentinel to exit the program. */
|
||||
#define EXIT_THE_PROGRAM (-1)
|
||||
@ -60,6 +59,20 @@ BIO *bio_in = NULL;
|
||||
BIO *bio_out = NULL;
|
||||
BIO *bio_err = NULL;
|
||||
|
||||
static void calculate_columns(DISPLAY_COLUMNS *dc)
|
||||
{
|
||||
FUNCTION *f;
|
||||
int len, maxlen = 0;
|
||||
|
||||
for (f = functions; f->name != NULL; ++f)
|
||||
if (f->type == FT_general || f->type == FT_md || f->type == FT_cipher)
|
||||
if ((len = strlen(f->name)) > maxlen)
|
||||
maxlen = len;
|
||||
|
||||
dc->width = maxlen + 2;
|
||||
dc->columns = (80 - 1) / dc->width;
|
||||
}
|
||||
|
||||
static int apps_startup()
|
||||
{
|
||||
#ifdef SIGPIPE
|
||||
@ -442,6 +455,7 @@ int help_main(int argc, char **argv)
|
||||
FUNC_TYPE tp;
|
||||
char *prog;
|
||||
HELP_CHOICE o;
|
||||
DISPLAY_COLUMNS dc;
|
||||
|
||||
prog = opt_init(argc, argv, help_options);
|
||||
while ((o = opt_next()) != OPT_hEOF) {
|
||||
@ -461,12 +475,13 @@ int help_main(int argc, char **argv)
|
||||
return 1;
|
||||
}
|
||||
|
||||
BIO_printf(bio_err, "\nStandard commands");
|
||||
calculate_columns(&dc);
|
||||
BIO_printf(bio_err, "Standard commands");
|
||||
i = 0;
|
||||
tp = FT_none;
|
||||
for (fp = functions; fp->name != NULL; fp++) {
|
||||
nl = 0;
|
||||
if (((i++) % COLUMNS) == 0) {
|
||||
if (i++ % dc.columns == 0) {
|
||||
BIO_printf(bio_err, "\n");
|
||||
nl = 1;
|
||||
}
|
||||
@ -484,7 +499,7 @@ int help_main(int argc, char **argv)
|
||||
"\nCipher commands (see the `enc' command for more details)\n");
|
||||
}
|
||||
}
|
||||
BIO_printf(bio_err, FORMAT, fp->name);
|
||||
BIO_printf(bio_err, "%-*s", dc.width, fp->name);
|
||||
}
|
||||
BIO_printf(bio_err, "\n\n");
|
||||
return 0;
|
||||
@ -499,6 +514,10 @@ static void list_type(FUNC_TYPE ft, int one)
|
||||
{
|
||||
FUNCTION *fp;
|
||||
int i = 0;
|
||||
DISPLAY_COLUMNS dc;
|
||||
|
||||
if (!one)
|
||||
calculate_columns(&dc);
|
||||
|
||||
for (fp = functions; fp->name != NULL; fp++) {
|
||||
if (fp->type != ft)
|
||||
@ -506,13 +525,14 @@ static void list_type(FUNC_TYPE ft, int one)
|
||||
if (one) {
|
||||
BIO_printf(bio_out, "%s\n", fp->name);
|
||||
} else {
|
||||
if ((i++ % COLUMNS) == 0 && fp != functions)
|
||||
if (i % dc.columns == 0 && i > 0)
|
||||
BIO_printf(bio_out, "\n");
|
||||
BIO_printf(bio_out, FORMAT, fp->name);
|
||||
BIO_printf(bio_out, "%-*s", dc.width, fp->name);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
if (!one)
|
||||
BIO_printf(bio_out, "\n");
|
||||
BIO_printf(bio_out, "\n\n");
|
||||
}
|
||||
|
||||
static int do_cmd(LHASH_OF(FUNCTION) *prog, int argc, char *argv[])
|
||||
@ -780,5 +800,5 @@ static LHASH_OF(FUNCTION) *prog_init(void)
|
||||
|
||||
for (f = functions; f->name != NULL; f++)
|
||||
(void)lh_FUNCTION_insert(ret, f);
|
||||
return (ret);
|
||||
return ret;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user