Исходники mc 4.6.0, 73-я строка файла src/dir.c:
---
g_strcasecmp() doesn't work well in some locales because it relies on
the locale-specific toupper(). On the other hand, strcoll() is case
sensitive in the "C" and "POSIX" locales, unlike other locales.
Solution: always use strcmp() for case sensitive sort. For case
insensitive sort use strcoll() if it's case insensitive for ASCII and
g_strcasecmp() otherwise.
---
Второе предложение.
Собственно, я потому и спросил - при "case sensitive" используется strcmp, который ничего никогда про локаль не знает. Соответственно, в koi8 его алфавит выглядит примерно, как "юабвдефг..."
Проблему-то я порешал, но пришлось переводить строки в "wide character" и сравнивать уже это. Вместо одной строки strcmp появилось 25 строк перевода и сравнения :)