Skip site navigation (1)Skip section navigation (2)
Date:      Thu, 24 May 2007 01:28:26 +0400
From:      "Artem Kuchin" <matrix@itlegion.ru>
To:        <freebsd-stable@freebsd.org>
Subject:   Broken locale after upgrade to 6-STABEL from 5-STABLE
Message-ID:  <009601c79d81$4e791a90$05000100@Artem>

next in thread | raw e-mail | index | archive | help
Recently i figured out that all locales stopped working
properly on some of my 6-STABLE servers and in all jails
on them.

These server diffeer from others (on which locale work)
in that they were upgraded to 6-STABLE directly from
5.3-STABLE.

Test was easy:

#!/usr/bin/perl

use POSIX qw(locale_h);
use locale;

setlocale(LC_ALL, 'ru_RU.CP1251') || warn "LOCALE: $!\n";

print lc("òõþëáÒÕÞËÁABCabc\n")."\n";

(the string is partially in RUssia, so you might not
be able to see correctly, but that is not the point).

After an hour of figuring out why it does not work
i figureed that it was because of

/lib/libc.so.5

I chflaged it, deleted it and made a link to
libc.so.6

After that setlocale in perl worked fine.

However, on another server, where setlocale worked
and works fine this libc.so.5 also present and causes
no problems.

What i don't understand, is how the appropriate 'so'
is selected? How freebsd known which so to load
this
libc.so.5
or this
libc.so.6
?

where it is specified?

Another question, is why setlocale in C
says that locale is set fine.

A simple proggie:

 #include <locale.h>
 #include <errno.h>
     #include <ctype.h>

main(){

    char *b=setlocale(LC_ALL, "ru_RU.CP1251");
    if (!b){
        printf("FAILED! %d\n",errno);
    }
    else {
        printf("OK: %s %d\n",b,errno);
        printf("LOCALE %s\n",setlocale(LC_CTYPE,NULL));
        printf("1: TO UPPER %c TO LOWER %c\n",toupper('Ñ'),tolower('ñ'));
        printf("1-0: TO UPPER %c TO LOWER %c\n",toupper('ñ'),tolower('Ñ'));
        printf("2: TO UPPER %c TO LOWER %c\n",toupper('r'),tolower('R'));
    }
}

Does not work even when locales work on perl (toupper does not
return an upper letter for russia, but works with latin r, same
with tolower).

Am i missing something?




--
Regards,
Artem 




Want to link to this message? Use this URL: <https://mail-archive.FreeBSD.org/cgi/mid.cgi?009601c79d81$4e791a90$05000100>