From 4b81a8c2a5ba4cf93f5be8481cc4d8e73838e96e Mon Sep 17 00:00:00 2001 From: Alon Levy Date: Thu, 6 Jan 2011 12:54:28 +0200 Subject: client/cmd_line_parser: fix wrong reporting of bad argument in --bla=val case We use get_opt_long, which allows non ambiguous abbreviations, but since we didn't like that we have code that checks for abbreviations and issues an error. But that code only handled separate argument and key like: --bla value and didn't handle them in the same arguemnts, like: --bla=value This patch fixes that, and gives a slightly better error report (it still contains the =value part though) --- client/cmd_line_parser.cpp | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) (limited to 'client/cmd_line_parser.cpp') diff --git a/client/cmd_line_parser.cpp b/client/cmd_line_parser.cpp index 963250b1..da4af05a 100644 --- a/client/cmd_line_parser.cpp +++ b/client/cmd_line_parser.cpp @@ -346,10 +346,13 @@ int CmdLineParser::get_option(char** val) } #ifdef DISABLE_ABBREVIATE - int name_pos = (opt_obj->type == REQUIRED_ARGUMENT) ? optind - 2 : optind - 1; + int name_pos = + (opt_obj->type == REQUIRED_ARGUMENT && optarg[-1] != '=') + ? optind - 2 + : optind - 1; std::string cmd_name(_argv[name_pos] + 2); if (cmd_name.find(opt_obj->name) != 0) { - Platform::term_printf("%s: invalid option '--%s'\n", _argv[0], cmd_name.c_str()); + Platform::term_printf("%s: invalid abbreviated option '--%s'\n", _argv[0], cmd_name.c_str()); return OPTION_ERROR; } #endif -- cgit