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.
This commit is contained in:
Martin v. Löwis 2003-03-05 15:13:47 +00:00
parent 620c0837bd
commit 73d538b9c6
6 changed files with 67 additions and 22 deletions

View file

@ -17,6 +17,11 @@
#include <signal.h>
#endif
#ifdef HAVE_LANGINFO_H
#include <locale.h>
#include <langinfo.h>
#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