Made check for structured option handling more robust and faster.

Earlier it could have failed in some special cases.
parent 7c799b17
......@@ -458,17 +458,19 @@ int handle_options(int *argc, char ***argv,
static char *check_struct_option(char *cur_arg, char *key_name)
{
char *ptr, *ptr2;
char *ptr, *end;
ptr= strcend(cur_arg, '.');
ptr2= strcend(cur_arg, '=');
ptr= strcend(cur_arg + 1, '.'); // Skip the first character
end= strcend(cur_arg, '=');
/*
Minimum length for a struct option is 3 (--a.b)
If the (first) dot is after an equal sign, then it is part
If the first dot is after an equal sign, then it is part
of a variable value and the option is not a struct option.
Also, if the last character in the string before the ending
NULL, or the character right before equal sign is the first
dot found, the option is not a struct option.
*/
if (strlen(ptr) >= 3 && ptr2 - ptr > 0)
if (end - ptr > 1)
{
uint len= ptr - cur_arg;
strnmov(key_name, cur_arg, len);
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment