diff options
author | Tobias Brunner <tobias@strongswan.org> | 2013-06-21 15:41:12 +0200 |
---|---|---|
committer | Tobias Brunner <tobias@strongswan.org> | 2013-06-21 15:51:42 +0200 |
commit | 4049ec42bf5e6a80c253bccb271a864f4eefc8aa (patch) | |
tree | 6f2f734c396876f53156388e363579c6eb52a248 | |
parent | 0d25c4ef8794b1488e8a4755449a08a239eb600e (diff) | |
download | strongswan-4049ec42bf5e6a80c253bccb271a864f4eefc8aa.tar.bz2 strongswan-4049ec42bf5e6a80c253bccb271a864f4eefc8aa.tar.xz |
charon-cmd: Handle simple command line arguments like --help before the others
-rw-r--r-- | src/charon-cmd/charon-cmd.c | 17 |
1 files changed, 14 insertions, 3 deletions
diff --git a/src/charon-cmd/charon-cmd.c b/src/charon-cmd/charon-cmd.c index d0e20f9be..2d8cdce70 100644 --- a/src/charon-cmd/charon-cmd.c +++ b/src/charon-cmd/charon-cmd.c @@ -249,9 +249,10 @@ static void usage(FILE *out, char *msg, char *binary) } /** - * Handle command line options + * Handle command line options, if simple is TRUE only arguments like --help + * and --version are handled. */ -static void handle_arguments(int argc, char *argv[]) +static void handle_arguments(int argc, char *argv[], bool simple) { struct option long_opts[CMD_OPT_COUNT + 1] = {}; int i, opt; @@ -262,6 +263,8 @@ static void handle_arguments(int argc, char *argv[]) long_opts[i].val = cmd_options[i].id; long_opts[i].has_arg = cmd_options[i].has_arg; } + /* reset option parser */ + optind = 1; while (TRUE) { bool handled = FALSE; @@ -278,6 +281,10 @@ static void handle_arguments(int argc, char *argv[]) printf("%s, strongSwan %s\n", "charon-cmd", VERSION); exit(0); default: + if (simple) + { + continue; + } handled |= conn->handle(conn, opt, optarg); handled |= creds->handle(creds, opt, optarg); if (handled) @@ -303,6 +310,9 @@ int main(int argc, char *argv[]) struct utsname utsname; int group; + /* handle simple arguments */ + handle_arguments(argc, argv, TRUE); + dbg = dbg_stderr; atexit(library_deinit); if (!library_init(NULL)) @@ -353,7 +363,8 @@ int main(int argc, char *argv[]) creds = cmd_creds_create(); atexit(cleanup_creds); - handle_arguments(argc, argv); + /* handle all arguments */ + handle_arguments(argc, argv, FALSE); if (uname(&utsname) != 0) { |