diff options
author | Pablo Neira Ayuso <pablo@gnumonks.org> | 2011-04-11 16:33:03 +0200 |
---|---|---|
committer | Harald Welte <laforge@gnumonks.org> | 2011-04-12 21:50:47 +0200 |
commit | 25ffe541185fdd772bef86a26feb5377b939be89 (patch) | |
tree | fcb6db30a59f9d5153f8c33707507bd68524b625 | |
parent | 23b1b808f1ce65b8aec3095b52e0bc3946cde4bb (diff) |
ipaccess-proxy: more robust option parsing and checking
With this patch, ipaccess-proxy makes more robust option checking:
$ ./ipaccess-proxy -l 1.1.1.1 -b 2.2.2.2 -e
ERROR: missing mandatory argument for `-e' option
And we return to shell to enforce the user to try again with the
appropriate invocation.
Before this patch, the default getopt_long() error handling was
enabled which displayed this message:
./ipaccess-proxy: option requires an argument -- 'e'
and ipaccess-proxy continued working.
This is generic enough to cover other option that require mandatory
arguments like `--bsc' and `--listen'.
-rw-r--r-- | openbsc/src/ipaccess/ipaccess-proxy.c | 15 |
1 files changed, 15 insertions, 0 deletions
diff --git a/openbsc/src/ipaccess/ipaccess-proxy.c b/openbsc/src/ipaccess/ipaccess-proxy.c index 55658cf7a..dd0a73975 100644 --- a/openbsc/src/ipaccess/ipaccess-proxy.c +++ b/openbsc/src/ipaccess/ipaccess-proxy.c @@ -1133,6 +1133,9 @@ static void handle_options(int argc, char** argv) { int options_mask = 0; + /* disable explicit missing arguments error output from getopt_long */ + opterr = 0; + while (1) { int option_index = 0, c; static struct option long_options[] = { @@ -1176,6 +1179,18 @@ static void handle_options(int argc, char** argv) case 'e': log_set_log_level(stderr_target, atoi(optarg)); break; + case '?': + if (optopt) { + printf("ERROR: missing mandatory argument " + "for `%s' option\n", argv[optind-1]); + } else { + printf("ERROR: unknown option `%s'\n", + argv[optind-1]); + } + print_usage(); + print_help(); + exit(EXIT_FAILURE); + break; default: /* ignore */ break; |