newlocale: Linux incompatibility
Ken Brown
kbrown@cornell.edu
Thu Mar 23 19:48:35 GMT 2023
I'm reporting this here rather than the newlib list because the behavior
is compatible with Posix but not Linux, so I think it's a Cygwin issue.
Consider the following test case:
$ cat locale_test.c
#include <stdio.h>
#include <locale.h>
int main ()
{
const char *locale = "en_DE.UTF-8";
locale_t loc = newlocale (LC_COLLATE_MASK | LC_CTYPE_MASK, locale, 0);
if (!loc)
perror ("newlocale");
else
printf ("newlocale succeeded on invalid locale %s\n", locale);
}
$ gcc -o locale_test locale_test.c
$ ./locale_test.exe
newlocale succeeded on invalid locale en_DE.UTF-8
On Linux, the newlocale call fails with ENOENT, as is documented on the
man page. Posix doesn't say what should happen on an invalid locale, so
this is not, strictly speaking, a bug.
Ken
P.S. I noticed this because of a failing Emacs test. No one else has
reported this test failure, so it seems that newlocale fails on an
invalid locale on all platforms supported by Emacs other than Cygwin.
More information about the Cygwin
mailing list