aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorPablo Neira Ayuso <pablo@gnumonks.org>2011-04-11 16:33:03 +0200
committerHarald Welte <laforge@gnumonks.org>2011-04-12 21:50:47 +0200
commit25ffe541185fdd772bef86a26feb5377b939be89 (patch)
treefcb6db30a59f9d5153f8c33707507bd68524b625
parent23b1b808f1ce65b8aec3095b52e0bc3946cde4bb (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.c15
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;