Bug #42144: plugin_load fails
The enum system variables were handled inconsistently as ints, unsigned int and unsigned long on various places. This caused problems on platforms on which sizeof(int) != sizeof(long). Fixed by homogenizing the type of the enum variables to unsigned int, since it's size compatible with the C enum type. Removed the test from the experimental list.
This commit is contained in:
parent
60ab046abc
commit
5eeb6488cf
@ -318,7 +318,7 @@ DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsigned long long) = { \
|
|||||||
#name, comment, check, update, &varname, def, min, max, blk }
|
#name, comment, check, update, &varname, def, min, max, blk }
|
||||||
|
|
||||||
#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
|
#define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
|
||||||
DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \
|
DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned int) = { \
|
||||||
PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
|
PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
|
||||||
#name, comment, check, update, &varname, def, typelib }
|
#name, comment, check, update, &varname, def, typelib }
|
||||||
|
|
||||||
|
@ -14,7 +14,6 @@ funcs_2.ndb_charset # joro : NDB tests marked as experiment
|
|||||||
|
|
||||||
main.ctype_gbk_binlog @solaris # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists
|
main.ctype_gbk_binlog @solaris # Bug#46010: main.ctype_gbk_binlog fails sporadically : Table 't2' already exists
|
||||||
main.func_str @solaris # joro: Bug#40928
|
main.func_str @solaris # joro: Bug#40928
|
||||||
main.plugin_load @solaris # Bug#42144
|
|
||||||
main.sp @solaris # joro : Bug#54138
|
main.sp @solaris # joro : Bug#54138
|
||||||
main.outfile_loaddata @solaris # joro : Bug #46895
|
main.outfile_loaddata @solaris # joro : Bug #46895
|
||||||
|
|
||||||
|
@ -656,17 +656,21 @@ static int setval(const struct my_option *opts, void *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)
|
|
||||||
{
|
{
|
||||||
/*
|
int type= find_type(argument, opts->typelib, 2);
|
||||||
Accept an integer representation of the enumerated item.
|
if (type < 1)
|
||||||
*/
|
{
|
||||||
char *endptr;
|
/*
|
||||||
unsigned int arg= (unsigned int) strtol(argument, &endptr, 10);
|
Accept an integer representation of the enumerated item.
|
||||||
if (*endptr || arg >= opts->typelib->count)
|
*/
|
||||||
return EXIT_ARGUMENT_INVALID;
|
char *endptr;
|
||||||
*(int*)result_pos= arg;
|
uint arg= (uint) strtoul(argument, &endptr, 10);
|
||||||
|
if (*endptr || arg >= opts->typelib->count)
|
||||||
|
return EXIT_ARGUMENT_INVALID;
|
||||||
|
*(uint*)result_pos= arg;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
*(uint*)result_pos= type - 1;
|
||||||
}
|
}
|
||||||
break;
|
break;
|
||||||
case GET_SET:
|
case GET_SET:
|
||||||
|
@ -3030,10 +3030,10 @@ static int construct_options(MEM_ROOT *mem_root, struct st_plugin_int *tmp,
|
|||||||
Allocate temporary space for the value of the tristate.
|
Allocate temporary space for the value of the tristate.
|
||||||
This option will have a limited lifetime and is not used beyond
|
This option will have a limited lifetime and is not used beyond
|
||||||
server initialization.
|
server initialization.
|
||||||
GET_ENUM value is an integer.
|
GET_ENUM value is unsigned integer.
|
||||||
*/
|
*/
|
||||||
options[0].value= options[1].value= (uchar **)alloc_root(mem_root,
|
options[0].value= options[1].value= (uchar **)alloc_root(mem_root,
|
||||||
sizeof(int));
|
sizeof(uint));
|
||||||
*((uint*) options[0].value)= *((uint*) options[1].value)=
|
*((uint*) options[0].value)= *((uint*) options[1].value)=
|
||||||
(uint) options[0].def_value;
|
(uint) options[0].def_value;
|
||||||
|
|
||||||
|
@ -848,7 +848,7 @@ int ha_example::create(const char *name, TABLE *table_arg,
|
|||||||
struct st_mysql_storage_engine example_storage_engine=
|
struct st_mysql_storage_engine example_storage_engine=
|
||||||
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
|
{ MYSQL_HANDLERTON_INTERFACE_VERSION };
|
||||||
|
|
||||||
static ulong srv_enum_var= 0;
|
static uint srv_enum_var= 0;
|
||||||
static ulong srv_ulong_var= 0;
|
static ulong srv_ulong_var= 0;
|
||||||
|
|
||||||
const char *enum_var_names[]=
|
const char *enum_var_names[]=
|
||||||
|
Loading…
x
Reference in New Issue
Block a user