Hi,
The function towlower doesn't work with locales diffrent from C. Issue was introduced in this commit: https://cgit.openadk.org/cgi/cgit/uclibc-ng.git/commit/?id= 8cde3a9bf2856dcb9a759dec7ecb04a68e712254 Call to setlocale is needed for correct generation of the table uplow_diff. I received the compile time error "range assumption error" after uncommenting the call. Similar problem described here: http://lists.uclibc.org/pipermail/uclibc/2015-March/048852.html
The attached patch fix the problem by using int32_t values.
Test program: $ cat test.c #include <locale.h> #include <stdio.h> #include <wchar.h> #include <wctype.h>
int main(int argc, char *argv[]) { int i = 0; wchar_t str[] = L"ТЕСТОВАЯ СТРОКА"; wchar_t c;
setlocale(LC_ALL, "ru_RU.utf-8");
wprintf(L"Input:\t"%ls"\n", str); wprintf(L"Output:\t"");
while (str[i]) { c = str[i]; putwchar(towlower(c)); i++; }
wprintf(L""\n");
return 0; }
Output (without patch): $ ./test Input: "ТЕСТОВАЯ СТРОКА" Output: "ТЕСТОВАЯ СТРОКА"
Output (with patch): $ ./test Input: "ТЕСТОВАЯ СТРОКА" Output: "тестовая строка"