diff options
Diffstat (limited to 'mysys')
-rw-r--r-- | mysys/charset-def.c | 73 | ||||
-rw-r--r-- | mysys/charset.c | 4 | ||||
-rw-r--r-- | mysys/my_rnd.c | 22 |
3 files changed, 75 insertions, 24 deletions
diff --git a/mysys/charset-def.c b/mysys/charset-def.c index 2e23adc5147..b884fa5c78c 100644 --- a/mysys/charset-def.c +++ b/mysys/charset-def.c @@ -15,6 +15,8 @@ #include "mysys_priv.h" +#include "../strings/ctype-uca.h" + /* Include all compiled character sets into the client If a client don't want to use all of them, he can define his own @@ -181,6 +183,74 @@ extern struct charset_info_st my_charset_utf8mb4_unicode_520_nopad_ci; #endif /* HAVE_UCA_COLLATIONS */ + +static my_bool +my_uca1400_collation_definition_add(MY_CHARSET_LOADER *loader, + my_cs_encoding_t charset_id, + uint tailoring_id, + my_bool nopad, + my_bool secondary_level, + my_bool tertiary_level) +{ + struct charset_info_st *tmp; + uint collation_id= my_uca1400_make_builtin_collation_id(charset_id, + tailoring_id, + nopad, + secondary_level, + tertiary_level); + if (!collation_id) + return FALSE; + if (!(tmp= (struct charset_info_st*) + my_once_alloc(sizeof(CHARSET_INFO),MYF(0)))) + return TRUE; + if (my_uca1400_collation_definition_init(loader, tmp, collation_id)) + return TRUE; + add_compiled_collation(tmp); + return FALSE; +} + + +static my_bool +my_uca1400_collation_definitions_add() +{ + my_cs_encoding_t charset_id; + MY_CHARSET_LOADER loader; + my_charset_loader_init_mysys(&loader); + for (charset_id= (my_cs_encoding_t) 0; + charset_id <= (my_cs_encoding_t) MY_CS_ENCODING_LAST; + charset_id++) + { + uint tailoring_id; + for (tailoring_id= 0 ; + tailoring_id < MY_UCA1400_COLLATION_DEFINITION_COUNT; + tailoring_id++) + { + uint nopad; + for (nopad= 0; nopad < 2; nopad++) + { + uint secondary_level; + for (secondary_level= 0; secondary_level < 2; secondary_level++) + { + if (my_uca1400_collation_definition_add(&loader, + charset_id, tailoring_id, + (my_bool) nopad, + (my_bool) secondary_level, + FALSE)) + return TRUE; + if (my_uca1400_collation_definition_add(&loader, + charset_id, tailoring_id, + (my_bool) nopad, + (my_bool) secondary_level, + TRUE)) + return TRUE; + } + } + } + } + return FALSE; +} + + my_bool init_compiled_charsets(myf flags __attribute__((unused))) { CHARSET_INFO *cs; @@ -470,6 +540,9 @@ my_bool init_compiled_charsets(myf flags __attribute__((unused))) /* Copy compiled charsets */ for (cs=compiled_charsets; cs->coll_name.str; cs++) add_compiled_extra_collation((struct charset_info_st *) cs); + + if (my_uca1400_collation_definitions_add()) + return TRUE; return FALSE; } diff --git a/mysys/charset.c b/mysys/charset.c index da6180dccba..2b74b7c8c16 100644 --- a/mysys/charset.c +++ b/mysys/charset.c @@ -834,9 +834,9 @@ static CHARSET_INFO *find_collation_data_inheritance_source(CHARSET_INFO *cs, my if (cs->tailoring && !strncmp(cs->tailoring, "[import ", 8) && (end= strchr(cs->tailoring + 8, ']')) && - (beg= cs->tailoring + 8) + MY_CS_NAME_SIZE > end) + (beg= cs->tailoring + 8) + MY_CS_COLLATION_NAME_SIZE > end) { - char name[MY_CS_NAME_SIZE + 1]; + char name[MY_CS_COLLATION_NAME_SIZE + 1]; memcpy(name, beg, end - beg); name[end - beg]= '\0'; return inheritance_source_by_id(cs, get_collation_number(name,MYF(flags))); diff --git a/mysys/my_rnd.c b/mysys/my_rnd.c index 0af251b4ade..b1dd8b1f36f 100644 --- a/mysys/my_rnd.c +++ b/mysys/my_rnd.c @@ -64,25 +64,3 @@ double my_rnd(struct my_rnd_struct *rand_st) return (((double) seed1)/rand_st->max_value_dbl); } - -/** - Generate a random number using the OpenSSL/yaSSL supplied - random number generator if available. - - @param rand_st [INOUT] Structure used for number generation - only if none of the SSL libraries are - available. - - @retval Generated random number. -*/ - -double my_rnd_ssl(struct my_rnd_struct *rand_st) -{ -#if defined(HAVE_OPENSSL) - rc= RAND_bytes((unsigned char *) &res, sizeof (unsigned int)); - if (rc) - return (double)res / (double)UINT_MAX; -#endif /* defined(HAVE_OPENSSL) */ - - return my_rnd(rand_st); -} |