summaryrefslogtreecommitdiff
path: root/mysys
diff options
context:
space:
mode:
Diffstat (limited to 'mysys')
-rw-r--r--mysys/charset-def.c73
-rw-r--r--mysys/charset.c4
-rw-r--r--mysys/my_rnd.c22
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);
-}