From 73d538b9c6d2f262a7d615248c84e509ebd64731 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Martin=20v=2E=20L=C3=B6wis?= Date: Wed, 5 Mar 2003 15:13:47 +0000 Subject: Always initialize Py_FileSystemDefaultEncoding on Unix in Py_Initialize, and not as a side effect of setlocale. Expose it as sys.getfilesystemencoding. Adjust test case. --- Python/pythonrun.c | 28 ++++++++++++++++++++++++++++ 1 file changed, 28 insertions(+) (limited to 'Python/pythonrun.c') diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 908bc42f6e..62dfd9306d 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -17,6 +17,11 @@ #include #endif +#ifdef HAVE_LANGINFO_H +#include +#include +#endif + #ifdef MS_WINDOWS #undef BYTE #include "windows.h" @@ -181,6 +186,29 @@ Py_Initialize(void) initsite(); /* Module site */ PyModule_WarningsModule = PyImport_ImportModule("warnings"); + +#if defined(Py_USING_UNICODE) && defined(HAVE_LANGINFO_H) && defined(CODESET) + /* On Unix, set the file system encoding according to the + user's preference, if the CODESET names a well-known + Python codec, and Py_FileSystemDefaultEncoding isn't + initialized by other means. */ + if (!Py_FileSystemDefaultEncoding) { + char *saved_locale = setlocale(LC_CTYPE, NULL); + char *codeset; + setlocale(LC_CTYPE, ""); + codeset = nl_langinfo(CODESET); + PyObject *enc = NULL; + if (*codeset) { + enc = PyCodec_Encoder(codeset); + if (enc) { + Py_FileSystemDefaultEncoding = strdup(codeset); + Py_DECREF(enc); + } else + PyErr_Clear(); + } + setlocale(LC_CTYPE, saved_locale); + } +#endif } #ifdef COUNT_ALLOCS -- cgit v1.2.1