Commit de91a33d authored by Kristofer Pettersson's avatar Kristofer Pettersson

Bug#45336 --enable-foobar doesn't work for any plugin foobar.

Because of a regression introduced by bug#19027 the option --enable-foobar
doesn't work anymore for any plugin 'foobar'. The reason is that plugin
names are tristate options variables with optional parameters and integer
values are not accepted. Since the 'enable' prefix attempts to assign '1'
to the option the operation fails.

This patch translates any number n assigned to a plugin variable of type ENUM
to be the corresponding enumerated item. As a side effect --enable-foobar and
--disable-foobar will also start working again.

mysys/my_getopt.c:
  * setval now accepts integer values for option variables of type ENUM.
parent 5ce0b41f
...@@ -20,6 +20,7 @@ ...@@ -20,6 +20,7 @@
#include <mysys_err.h> #include <mysys_err.h>
#include <my_getopt.h> #include <my_getopt.h>
#include <errno.h> #include <errno.h>
#include <m_string.h>
typedef void (*init_func_p)(const struct my_option *option, uchar* *variable, typedef void (*init_func_p)(const struct my_option *option, uchar* *variable,
longlong value); longlong value);
...@@ -649,8 +650,18 @@ static int setval(const struct my_option *opts, uchar* *value, char *argument, ...@@ -649,8 +650,18 @@ static int setval(const struct my_option *opts, uchar* *value, char *argument,
return EXIT_OUT_OF_MEMORY; return EXIT_OUT_OF_MEMORY;
break; break;
case GET_ENUM: case GET_ENUM:
if (((*(int*)result_pos)= find_type(argument, opts->typelib, 2) - 1) < 0) if (((*(int*)result_pos)=
find_type(argument, opts->typelib, 2) - 1) < 0)
{
/*
Accept an integer representation of the enumerated item.
*/
char *endptr;
unsigned int arg= (unsigned int) strtol(argument, &endptr, 10);
if (*endptr || arg >= opts->typelib->count)
return EXIT_ARGUMENT_INVALID; return EXIT_ARGUMENT_INVALID;
*(int*)result_pos= arg;
}
break; break;
case GET_SET: case GET_SET:
*((ulonglong*)result_pos)= find_typeset(argument, opts->typelib, &err); *((ulonglong*)result_pos)= find_typeset(argument, opts->typelib, &err);
......
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