List:Commits« Previous MessageNext Message »
From:Georgi Kodinov Date:August 4 2010 4:55pm
Subject:bzr push into mysql-5.1-bugteam branch (Georgi.Kodinov:3472 to 3473)
Bug#42144
View as plain text  
 3473 Georgi Kodinov	2010-08-04
      Bug #42144: plugin_load fails
      
      Reverted the ulong->uint diff
      Re-applied the first diff.
      The original commit message follows:
      
      enum plugin system variables are ulong internally, not int.
      On systems where long is not the same as an int it causes
      problems. 
      Fixed by correct typecasting. Removed the test from the 
      experimental list.

    modified:
      include/mysql/plugin.h
      mysys/my_getopt.c
      sql/sql_plugin.cc
      storage/example/ha_example.cc
 3472 Georgi Kodinov	2010-08-03
      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.

    modified:
      include/mysql/plugin.h
      mysql-test/collections/default.experimental
      mysys/my_getopt.c
      sql/sql_plugin.cc
      storage/example/ha_example.cc
=== modified file 'include/mysql/plugin.h'
--- a/include/mysql/plugin.h	2010-08-03 16:01:30 +0000
+++ b/include/mysql/plugin.h	2010-08-04 12:58:09 +0000
@@ -318,7 +318,7 @@ DECLARE_MYSQL_SYSVAR_SIMPLE(name, unsign
   #name, comment, check, update, &varname, def, min, max, blk }
 
 #define MYSQL_SYSVAR_ENUM(name, varname, opt, comment, check, update, def, typelib) \
-DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned int) = { \
+DECLARE_MYSQL_SYSVAR_TYPELIB(name, unsigned long) = { \
   PLUGIN_VAR_ENUM | ((opt) & PLUGIN_VAR_MASK), \
   #name, comment, check, update, &varname, def, typelib }
 

=== modified file 'mysys/my_getopt.c'
--- a/mysys/my_getopt.c	2010-08-03 16:01:30 +0000
+++ b/mysys/my_getopt.c	2010-08-04 12:58:09 +0000
@@ -664,13 +664,13 @@ static int setval(const struct my_option
             Accept an integer representation of the enumerated item.
           */
           char *endptr;
-          uint arg= (uint) strtoul(argument, &endptr, 10);
+          ulong arg= strtoul(argument, &endptr, 10);
           if (*endptr || arg >= opts->typelib->count)
             return EXIT_ARGUMENT_INVALID;
-          *(uint*)result_pos= arg;
+          *((ulong*) result_pos)= arg;
         }
         else
-          *(uint*)result_pos= type - 1;
+          *((ulong*) result_pos)= type - 1;
       }
       break;
     case GET_SET:
@@ -1008,7 +1008,7 @@ static void init_one_value(const struct 
     *((int*) variable)= (int) getopt_ll_limit_value((int) value, option, NULL);
     break;
   case GET_ENUM:
-    *((uint*) variable)= (uint) value;
+    *((ulong*) variable)= (ulong) value;
     break;
   case GET_UINT:
     *((uint*) variable)= (uint) getopt_ull_limit_value((uint) value, option, NULL);
@@ -1248,7 +1248,7 @@ void my_print_variables(const struct my_
 	}
 	break;
       case GET_ENUM:
-        printf("%s\n", get_type(optp->typelib, *(uint*) value));
+        printf("%s\n", get_type(optp->typelib, *(ulong*) value));
 	break;
       case GET_STR:
       case GET_STR_ALLOC:                    /* fall through */

=== modified file 'sql/sql_plugin.cc'
--- a/sql/sql_plugin.cc	2010-08-03 16:01:30 +0000
+++ b/sql/sql_plugin.cc	2010-08-04 12:58:09 +0000
@@ -3030,12 +3030,12 @@ static int construct_options(MEM_ROOT *m
     Allocate temporary space for the value of the tristate.
     This option will have a limited lifetime and is not used beyond
     server initialization.
-    GET_ENUM value is unsigned integer.
+    GET_ENUM value is a unsigned long integer.
   */
   options[0].value= options[1].value= (uchar **)alloc_root(mem_root,
-                                                          sizeof(uint));
-  *((uint*) options[0].value)= *((uint*) options[1].value)=
-    (uint) options[0].def_value;
+                                                          sizeof(ulong));
+  *((ulong*) options[0].value)= *((ulong*) options[1].value)=
+    (ulong) options[0].def_value;
 
   options+= 2;
 

=== modified file 'storage/example/ha_example.cc'
--- a/storage/example/ha_example.cc	2010-08-03 16:01:30 +0000
+++ b/storage/example/ha_example.cc	2010-08-04 12:58:09 +0000
@@ -848,7 +848,7 @@ int ha_example::create(const char *name,
 struct st_mysql_storage_engine example_storage_engine=
 { MYSQL_HANDLERTON_INTERFACE_VERSION };
 
-static uint srv_enum_var= 0;
+static ulong srv_enum_var= 0;
 static ulong srv_ulong_var= 0;
 
 const char *enum_var_names[]=


Attachment: [text/bzr-bundle] bzr/georgi.kodinov@oracle.com-20100804125809-5ij004o4nqzylqm4.bundle
Thread
bzr push into mysql-5.1-bugteam branch (Georgi.Kodinov:3472 to 3473)Bug#42144Georgi Kodinov4 Aug