diff options
author | Eugene Yudin <e.yudin@ndmsystems.com> | 2017-07-24 22:27:00 +0200 |
---|---|---|
committer | Waldemar Brodkorb <wbx@openadk.org> | 2017-07-28 19:06:07 +0200 |
commit | b98192b80ee5654aa7c5590bcc266c5eec2c67a5 (patch) | |
tree | b6f6dbf90cd2dadceb24b4ea8e4ea8831e79c88e /extra/locale/gen_ldc.c | |
parent | 63597398e4fa0db50638568a8caa1637bab44705 (diff) |
fix tolower and locales
The function towlower doesn't work with locales different from C.
Issue was introduced in commit: 8cde3a9bf2856dcb9a759dec7ecb04a68e712254
Call to setlocale is needed for correct generation of the table uplow_diff.
Otherwise you receive compile time error "range assumption error" after
uncommenting the call.
Similar problem described here:
http://lists.uclibc.org/pipermail/uclibc/2015-March/048852.html
This commit fix the problem by using int32_t values.
Diffstat (limited to 'extra/locale/gen_ldc.c')
-rw-r--r-- | extra/locale/gen_ldc.c | 16 |
1 files changed, 15 insertions, 1 deletions
diff --git a/extra/locale/gen_ldc.c b/extra/locale/gen_ldc.c index 2cedbddaf..5f454026f 100644 --- a/extra/locale/gen_ldc.c +++ b/extra/locale/gen_ldc.c @@ -129,6 +129,20 @@ void out_i16(FILE *f, const int16_t *p, size_t n, char *comment) fprintf(f, "\n},\n"); } +void out_i32(FILE *f, const int32_t *p, size_t n, char *comment) +{ + size_t i; + + fprintf(f, "{\t/* %s */", comment); + for (i = 0 ; i < n ; i++) { + if (!(i & 7)) { + fprintf(f, "\n\t"); + } + fprintf(f, "%11d, ", p[i]); + } + fprintf(f, "\n},\n"); +} + void out_size_t(FILE *f, const size_t *p, size_t n, char *comment) { size_t i; @@ -194,7 +208,7 @@ int main(int argc, char **argv) #ifdef __WCHAR_ENABLED out_uc(lso, __LOCALE_DATA_WCctype_data, __LOCALE_DATA_WCctype_TBL_LEN, "tblwctype"); out_uc(lso, __LOCALE_DATA_WCuplow_data, __LOCALE_DATA_WCuplow_TBL_LEN, "tblwuplow"); - out_i16(lso, __LOCALE_DATA_WCuplow_diff_data, __LOCALE_DATA_WCuplow_diff_TBL_LEN, "tblwuplow_diff"); + out_i32(lso, __LOCALE_DATA_WCuplow_diff_data, __LOCALE_DATA_WCuplow_diff_TBL_LEN, "tblwuplow_diff"); /* const unsigned char tblwcomb[WCcomb_TBL_LEN]; */ /* width?? */ #endif /* __WCHAR_ENABLED */ |