Hi,
The function towlower doesn't work with locales diffrent from C.
Issue was introduced in this commit:
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:
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: "тестовая строка"
--