Sources Bugzilla – Bug 14247
newlocale doesn't always set errno upon failure return
Last modified: 2012-06-15 03:45:50 UTC
Created attachment 6449 [details] Potential fix newlocale() neglects to set errno to an appropriate value when failing, if it has already been asked about the same incorrect locale name. #include <stdio.h> #include <errno.h> #include <locale.h> int main(int argc, char **argv) { locale_t loc; setlocale(LC_ALL, "C"); errno = 0; loc = newlocale(LC_COLLATE_MASK | LC_CTYPE_MASK, "nb_no.utf8", 0); printf("result = %p errno = %d\n", loc, errno); errno = 0; loc = newlocale(LC_COLLATE_MASK | LC_CTYPE_MASK, "nb_no.utf8", 0); printf("result = %p errno = %d\n", loc, errno); return 0; } Actual results: result = (nil) errno = 2 result = (nil) errno = 0 Expected results: result = (nil) errno = 2 result = (nil) errno = 2 (or at least something other than 0)