diff options
Diffstat (limited to 'strings/ctype-uca.inl')
-rw-r--r-- | strings/ctype-uca.inl | 26 |
1 files changed, 17 insertions, 9 deletions
diff --git a/strings/ctype-uca.inl b/strings/ctype-uca.inl index 9b8c271ab50..6aa72847c81 100644 --- a/strings/ctype-uca.inl +++ b/strings/ctype-uca.inl @@ -398,6 +398,7 @@ static inline weight_and_nchars_t MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner, my_uca_scanner_param *param, size_t nchars, + uint flags, uint *generated) { weight_and_nchars_t res; @@ -411,7 +412,10 @@ MY_FUNCTION_NAME(scanner_next_pad_trim)(my_uca_scanner *scanner, We reached the end of the string, but the caller wants more weights. Perform space padding. */ - res.weight= my_space_weight(param->level); + res.weight= + flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES ? + my_space_weight(param->level) : 0; + res.nchars= 1; (*generated)++; } @@ -448,7 +452,8 @@ MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(CHARSET_INFO *cs, const MY_UCA_WEIGHT_LEVEL *level, const uchar *s, size_t slen, const uchar *t, size_t tlen, - size_t nchars) + size_t nchars, + uint flags) { my_uca_scanner sscanner; my_uca_scanner tscanner; @@ -481,16 +486,17 @@ TODO: strnncollsp_nchars_onelevel s_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&sscanner, ¶m, s_nchars_left, - &generated); + flags, &generated); t_res= MY_FUNCTION_NAME(scanner_next_pad_trim)(&tscanner, ¶m, t_nchars_left, - &generated); + flags, &generated); if ((diff= (s_res.weight - t_res.weight))) return diff; if (generated == 2) { - if (cs->state & MY_CS_NOPAD) + if ((cs->state & MY_CS_NOPAD) && + (flags & MY_STRNNCOLLSP_NCHARS_EMULATE_TRIMMED_TRAILING_SPACES)) { /* Both values are auto-generated. There's no real data any more. @@ -542,11 +548,12 @@ static int MY_FUNCTION_NAME(strnncollsp_nchars)(CHARSET_INFO *cs, const uchar *s, size_t slen, const uchar *t, size_t tlen, - size_t nchars) + size_t nchars, + uint flags) { return MY_FUNCTION_NAME(strnncollsp_nchars_onelevel)(cs, &cs->uca->level[0], s, slen, t, tlen, - nchars); + nchars, flags); } @@ -557,7 +564,8 @@ static int MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs, const uchar *s, size_t slen, const uchar *t, size_t tlen, - size_t nchars) + size_t nchars, + uint flags) { uint i, level_flags= cs->levels_for_order; for (i= 0; level_flags; i++, level_flags>>= 1) @@ -569,7 +577,7 @@ MY_FUNCTION_NAME(strnncollsp_nchars_multilevel)(CHARSET_INFO *cs, &cs->uca->level[i], s, slen, t, tlen, - nchars); + nchars, flags); if (ret) return ret; } |