feat(ssl): X-macro driven algo list and dynamic usage

This commit is contained in:
lohhiiccc 2026-04-30 11:03:33 +02:00
parent 6c8bb5a3c0
commit 97d2f1383d
2 changed files with 22 additions and 7 deletions

@ -1 +1 @@
Subproject commit f21811b66f4f5d29ada3a53bd91763cac3f6d87f Subproject commit 35c32a9c323046f2e8d2c0380c3e512ee5a88dd4

View file

@ -11,14 +11,16 @@
/* Forward declarations */ /* Forward declarations */
static void init_config(struct ssl_config *config); static void init_config(struct ssl_config *config);
static void print_usage(const char *prog);
static const struct digest_algo *find_algo(const char *name); static const struct digest_algo *find_algo(const char *name);
static enum cli_code parse_subcommand(int argc, char **argv, int first_arg, static enum cli_code parse_subcommand(int argc, char **argv, int first_arg,
struct ssl_config *config); struct ssl_config *config);
/* ------------------- */ /* ------------------- */
static const struct digest_algo * const s_algos[] = { static const struct digest_algo * const s_algos[] = {
&g_md5, #define DIGEST_ALGO(lower, ds, bs) &g_##lower,
&g_sha256, #include <digest_algos.h>
#undef DIGEST_ALGO
NULL NULL
}; };
@ -43,16 +45,14 @@ parse_subcommand(int argc, char **argv, int first_arg,
if (first_arg >= argc) if (first_arg >= argc)
{ {
fprintf(stderr, "%s: missing command\n", argv[0]); fprintf(stderr, "%s: missing command\n", argv[0]);
fprintf(stderr, "usage: %s {md5|sha256} [-pqr] [-s string] [file...]\n", print_usage(argv[0]);
argv[0]);
return CLI_ERROR; return CLI_ERROR;
} }
config->algo = find_algo(argv[first_arg]); config->algo = find_algo(argv[first_arg]);
if (NULL == config->algo) if (NULL == config->algo)
{ {
fprintf(stderr, "%s: unknown command -- '%s'\n", argv[0], argv[first_arg]); fprintf(stderr, "%s: unknown command -- '%s'\n", argv[0], argv[first_arg]);
fprintf(stderr, "usage: %s {md5|sha256} [-pqr] [-s string] [file...]\n", print_usage(argv[0]);
argv[0]);
return CLI_ERROR; return CLI_ERROR;
} }
config->files = argv + first_arg + 1; config->files = argv + first_arg + 1;
@ -73,6 +73,21 @@ find_algo(const char *name)
return NULL; return NULL;
} }
static void
print_usage(const char *prog)
{
size_t i;
fprintf(stderr, "usage: %s {", prog);
for (i = 0; NULL != s_algos[i]; i++)
{
if (0 != i)
fprintf(stderr, "|");
fprintf(stderr, "%s", s_algos[i]->name);
}
fprintf(stderr, "} [-pqr] [-s string] [file...]\n");
}
static void static void
init_config(struct ssl_config *config) init_config(struct ssl_config *config)
{ {