From c99ee9916fe66df97a1ff4d57bcbd6b76076b905 Mon Sep 17 00:00:00 2001 From: john30 Date: Sun, 2 Oct 2016 14:47:45 +0200 Subject: [PATCH] better arguments check --- src/ebusd/main.cpp | 13 +++++++++---- 1 file changed, 9 insertions(+), 4 deletions(-) diff --git a/src/ebusd/main.cpp b/src/ebusd/main.cpp index 595df761..14daed47 100644 --- a/src/ebusd/main.cpp +++ b/src/ebusd/main.cpp @@ -202,8 +202,8 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) { struct options *opt = (struct options*)state->input; result_t result = RESULT_OK; - switch (key) { + switch (key) { // Device options: case 'd': // --device=/dev/ttyUSB0 if (arg == NULL || arg[0] == 0) { @@ -419,9 +419,16 @@ error_t parse_opt(int key, char *arg, struct argp_state *state) } break; + case ARGP_KEY_ARG: + if (!opt->checkConfig) { + argp_error(state, "invalid arguments starting with \"%s\"", arg); + return EINVAL; + } + return ARGP_ERR_UNKNOWN; default: return ARGP_ERR_UNKNOWN; } + return 0; } @@ -915,6 +922,7 @@ int main(int argc, char* argv[]) int arg_index = -1; setenv("ARGP_HELP_FMT", "no-dup-args-note", 0); if (argp_parse(&argp, argc, argv, ARGP_IN_ORDER, &arg_index, &opt) != 0) { + logError(lf_main, "invalid arguments"); return EINVAL; } @@ -959,9 +967,6 @@ int main(int argc, char* argv[]) return 0; } - if (arg_index < argc) - return EINVAL; - // open the device Device *device = Device::create(opt.device, !opt.noDeviceCheck, opt.readOnly, opt.initialSend, &logRawData); if (device == NULL) {