From: Martin Willi Date: Tue, 15 Sep 2009 08:20:22 +0000 (+0200) Subject: pki tool supports single letter short options X-Git-Tag: 4.3.5rc1~161 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=4fdb9f6f74435948143ae60397beb2eb2e02f804;p=thirdparty%2Fstrongswan.git pki tool supports single letter short options --- diff --git a/src/pki/command.c b/src/pki/command.c index 10559557a1..2cf136539b 100644 --- a/src/pki/command.c +++ b/src/pki/command.c @@ -46,19 +46,26 @@ static int help_idx; struct option command_opts[MAX_COMMANDS > MAX_OPTIONS ?: MAX_OPTIONS]; /** - * Build long_opts for a specific command + * Global optstring used by all subcommands + */ +char command_optstring[(MAX_COMMANDS > MAX_OPTIONS ?: MAX_OPTIONS) * 3]; + +/** + * Build command_opts/command_optstr for the active command */ static void build_opts() { - int i; + int i, pos = 0; memset(command_opts, 0, sizeof(command_opts)); + memset(command_optstring, 0, sizeof(command_optstring)); if (active == help_idx) { for (i = 0; cmds[i].cmd; i++) { command_opts[i].name = cmds[i].cmd; command_opts[i].val = cmds[i].op; + command_optstring[i] = cmds[i].op; } } else @@ -68,6 +75,19 @@ static void build_opts() command_opts[i].name = cmds[active].options[i].name; command_opts[i].has_arg = cmds[active].options[i].arg; command_opts[i].val = cmds[active].options[i].op; + command_optstring[pos++] = cmds[active].options[i].op; + switch (cmds[active].options[i].arg) + { + case optional_argument: + command_optstring[pos++] = ':'; + /* FALL */ + case required_argument: + command_optstring[pos++] = ':'; + /* FALL */ + case no_argument: + default: + break; + } } } } @@ -86,6 +106,7 @@ void command_register(command_t command) int command_usage(char *error) { FILE *out = stdout; + char buf[64]; int i; if (error) @@ -99,7 +120,8 @@ int command_usage(char *error) { for (i = 0; cmds[i].cmd; i++) { - fprintf(out, " pki --%-6s %s\n", cmds[i].cmd, cmds[i].description); + snprintf(buf, sizeof(buf), "--%s (-%c)", cmds[i].cmd, cmds[i].op); + fprintf(out, " pki %-14s %s\n", buf, cmds[i].description); } } else @@ -118,8 +140,10 @@ int command_usage(char *error) } for (i = 0; cmds[active].options[i].name; i++) { - fprintf(out, " --%-8s %s\n", - cmds[active].options[i].name, cmds[active].options[i].desc); + snprintf(buf, sizeof(buf), "--%s (-%c)", + cmds[active].options[i].name, cmds[active].options[i].op); + fprintf(out, " %-15s %s\n", + buf, cmds[active].options[i].desc); } } return error != NULL; @@ -145,7 +169,7 @@ int command_dispatch(int argc, char *argv[]) command_register((command_t){help, 'h', "help", "show usage information"}); build_opts(); - op = getopt_long(argc, argv, "", command_opts, NULL); + op = getopt_long(argc, argv, command_optstring, command_opts, NULL); for (i = 0; cmds[i].cmd; i++) { if (cmds[i].op == op) diff --git a/src/pki/command.h b/src/pki/command.h index b82d174b36..874bdaa803 100644 --- a/src/pki/command.h +++ b/src/pki/command.h @@ -74,6 +74,11 @@ struct command_t { */ extern struct option command_opts[]; +/** + * Short option string of the active command. + */ +extern char command_optstring[]; + /** * Register a command. */ diff --git a/src/pki/commands/gen.c b/src/pki/commands/gen.c index 65b5f5ca69..fcdb50a885 100644 --- a/src/pki/commands/gen.c +++ b/src/pki/commands/gen.c @@ -28,7 +28,7 @@ static int gen(int argc, char *argv[]) while (TRUE) { - switch (getopt_long(argc, argv, "", command_opts, NULL)) + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case 'h': return command_usage(NULL); diff --git a/src/pki/commands/issue.c b/src/pki/commands/issue.c index ba0ead4b6e..d62de39a44 100644 --- a/src/pki/commands/issue.c +++ b/src/pki/commands/issue.c @@ -53,7 +53,7 @@ static int issue(int argc, char *argv[]) while (TRUE) { - switch (getopt_long(argc, argv, "", command_opts, NULL)) + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case 'h': goto usage; @@ -275,7 +275,7 @@ static int issue(int argc, char *argv[]) not_before = time(NULL); not_after = not_before + lifetime * 24 * 60 * 60; - + cert = lib->creds->create(lib->creds, CRED_CERTIFICATE, CERT_X509, BUILD_SIGNING_KEY, private, BUILD_SIGNING_CERT, ca, BUILD_PUBLIC_KEY, public, BUILD_SUBJECT, id, diff --git a/src/pki/commands/keyid.c b/src/pki/commands/keyid.c index b302a8fcb9..b856a06e31 100644 --- a/src/pki/commands/keyid.c +++ b/src/pki/commands/keyid.c @@ -34,7 +34,7 @@ static int keyid(int argc, char *argv[]) while (TRUE) { - switch (getopt_long(argc, argv, "", command_opts, NULL)) + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case 'h': return command_usage(NULL); diff --git a/src/pki/commands/pub.c b/src/pki/commands/pub.c index 05430675de..7294179ded 100644 --- a/src/pki/commands/pub.c +++ b/src/pki/commands/pub.c @@ -35,7 +35,7 @@ static int pub(int argc, char *argv[]) while (TRUE) { - switch (getopt_long(argc, argv, "", command_opts, NULL)) + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case 'h': return command_usage(NULL); diff --git a/src/pki/commands/self.c b/src/pki/commands/self.c index 54ef2399b7..97eb783825 100644 --- a/src/pki/commands/self.c +++ b/src/pki/commands/self.c @@ -48,7 +48,7 @@ static int self(int argc, char *argv[]) while (TRUE) { - switch (getopt_long(argc, argv, "", command_opts, NULL)) + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case 'h': goto usage; diff --git a/src/pki/commands/verify.c b/src/pki/commands/verify.c index d070ce090b..26a6dca5de 100644 --- a/src/pki/commands/verify.c +++ b/src/pki/commands/verify.c @@ -29,7 +29,7 @@ static int verify(int argc, char *argv[]) while (TRUE) { - switch (getopt_long(argc, argv, "", command_opts, NULL)) + switch (getopt_long(argc, argv, command_optstring, command_opts, NULL)) { case 'h': return command_usage(NULL);