# Set the list of ways we expect to be able to ask for the "C" locale.
# 'invalid.ascii' is an invalid LOCALE name and so should get turned in to the
# default locale, which is traditionally C.
-EXPECTED_C_LOCALE_EQUIVALENTS = ["C", "invalid.ascii"]
+EXPECTED_C_LOCALE_EQUIVALENTS = ["C", "POSIX", "invalid.ascii"]
# Set our expectation for the default encoding used in the C locale
# for the filesystem encoding and the standard streams
# VxWorks defaults to using UTF-8 for all system interfaces
EXPECTED_C_LOCALE_STREAM_ENCODING = "utf-8"
EXPECTED_C_LOCALE_FS_ENCODING = "utf-8"
-if sys.platform.startswith("linux"):
- # Linux recognizes POSIX as a synonym for C. Python will always coerce
- # if the locale is set to POSIX, but not all platforms will use the
- # C locale encodings if POSIX is set, so we'll only test it on linux.
- EXPECTED_C_LOCALE_EQUIVALENTS.append("POSIX")
# Note that the above expectations are still wrong in some cases, such as:
# * Windows when PYTHONLEGACYWINDOWSFSENCODING is set
loc = locale.setlocale(locale.LC_CTYPE, "")
except locale.Error as e:
self.skipTest(str(e))
- if loc == "C":
- self.skipTest("test requires LC_CTYPE locale different than C")
+ if loc in ("C", "POSIX"):
+ self.skipTest("test requires LC_CTYPE locale different "
+ "than C and POSIX")
if loc in TARGET_LOCALES :
self.skipTest("coerced LC_CTYPE locale: %s" % loc)
* we may also want to check for that explicitly.
*/
const char *ctype_loc = setlocale(LC_CTYPE, NULL);
- return ctype_loc != NULL && strcmp(ctype_loc, "C") == 0;
+ if (ctype_loc == NULL) {
+ return 0;
+ }
+ return (strcmp(ctype_loc, "C") == 0 || strcmp(ctype_loc, "POSIX") == 0);
#else
/* Windows uses code pages instead of locales, so no locale is legacy */
return 0;