On Tue, Nov 8, 2011 at 9:31 PM, Peter Brett <pe...@peter-b.co.uk> wrote:

> Nala Ginrut <nalagin...@gmail.com> writes:
>
> > Here is the patch. It solved the problem like these:
> > @@ -1532,6 +1533,7 @@ scm_from_locale_string (const char *str)
> >  SCM
> >  scm_from_locale_stringn (const char *str, size_t len)
> >  {
> > +  setlocale (LC_ALL, "");
> >    return scm_from_stringn (str, len, locale_charset (),
> >                             scm_i_get_conversion_strategy (SCM_BOOL_F));
> >  }
> > @@ -1758,6 +1760,7 @@ scm_to_locale_string (SCM str)
> >  char *
> >  scm_to_locale_stringn (SCM str, size_t *lenp)
> >  {
> > +  setlocale (LC_ALL, "");
> >    return scm_to_stringn (str, lenp,
> >                           locale_charset (),
> >                           scm_i_get_conversion_strategy (SCM_BOOL_F));
>
> This patch *breaks* scm_to_locale_string() and
> scm_from_locale_string().  The documentation for these functions quite
> clearly states that they use "the current locale", not "the locale
> specified by the environment variables". Not to mention the fact that
> they change the current locale without restoring it afterwards.
>

NO, I don't agree.
setlocale(LC_ALL ,"") means the current locale is only queried, not
modified.
So it just make sure that locale_charset() can get the correct locale ,not
a modified locale.

I tested this in C code. Current locale is "zh_CN.UTF-8",  locale_charset()
will return "ANSI_X3.4-1968".
It's definitely wrong. We must use setlocale(LC_ALL,"") to query current
locale first, and locale_charset() will return "zh_CN.UTF-8".

Reply via email to