Doubts about uselocale semantics (aka, libstdc++/12859)

Paolo Carlini pcarlini@suse.de
Fri Oct 31 23:06:00 GMT 2003


Hi,

we have got this PR which boils down to this pure "C" testcase:

#define _GNU_SOURCE 1
#include <locale.h>
#include <stdio.h>

int main()
{
  __locale_t    loc_new, loc_old;
 
  printf("%d\n", isalpha(0xE4));  // 0

  setlocale( LC_ALL, "de_DE" );
  printf("%d\n", isalpha(0xE4));  // 1024

  loc_new = newlocale(1 << LC_ALL, "C", 0);
  loc_old = uselocale(loc_new);

  printf("%d\n", isalpha(0xE4));  // 0
 
  uselocale(loc_old);
   
  printf("%d\n", isalpha(0xE4));  // 0 instead of 1024!

  freelocale(loc_new);
  return 0;
}

I have read and re-read the relevant sections of "Thread-aware Locale
Model" (par 3.4, in particular) and really need your help: why the
second uselocale doesn't restore the "de_DE" locale for the current
thread?

In my naive understanding setlocale changes the global locale, that is
the locale used by all the threads by default, to "de_DE", then the
first uselocale changes the locale used by the current thread to "C",
which should then be restored to "de_DE" by the final uselocale.

What I'm missing? How should we use uselocale for our purposes?

Thanks in advance!
Paolo.



More information about the Libc-alpha mailing list