aboutsummaryrefslogtreecommitdiffstats
path: root/src/charon-cmd/charon-cmd.c
diff options
context:
space:
mode:
authorTobias Brunner <tobias@strongswan.org>2013-06-21 15:41:12 +0200
committerTobias Brunner <tobias@strongswan.org>2013-06-21 15:51:42 +0200
commit4049ec42bf5e6a80c253bccb271a864f4eefc8aa (patch)
tree6f2f734c396876f53156388e363579c6eb52a248 /src/charon-cmd/charon-cmd.c
parent0d25c4ef8794b1488e8a4755449a08a239eb600e (diff)
downloadstrongswan-4049ec42bf5e6a80c253bccb271a864f4eefc8aa.tar.bz2
strongswan-4049ec42bf5e6a80c253bccb271a864f4eefc8aa.tar.xz
charon-cmd: Handle simple command line arguments like --help before the others
Diffstat (limited to 'src/charon-cmd/charon-cmd.c')
-rw-r--r--src/charon-cmd/charon-cmd.c17
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)
{