Issue #10914: Initialize correctly the filesystem codec when creating a new
subinterpreter to fix a bootstrap issue with codecs implemented in Python, as the ISO-8859-15 codec. Add fscodec_initialized attribute to the PyInterpreterState structure.
This commit is contained in:
@@ -53,7 +53,7 @@ extern grammar _PyParser_Grammar; /* From graminit.c */
|
||||
|
||||
/* Forward */
|
||||
static void initmain(void);
|
||||
static void initfsencoding(void);
|
||||
static int initfsencoding(PyInterpreterState *interp);
|
||||
static void initsite(void);
|
||||
static int initstdio(void);
|
||||
static void flush_io(void);
|
||||
@@ -291,7 +291,8 @@ Py_InitializeEx(int install_sigs)
|
||||
|
||||
_PyTime_Init();
|
||||
|
||||
initfsencoding();
|
||||
if (initfsencoding(interp) < 0)
|
||||
Py_FatalError("Py_Initialize: unable to load the file system codec");
|
||||
|
||||
if (install_sigs)
|
||||
initsigs(); /* Signal handling stuff, including initintr() */
|
||||
@@ -608,6 +609,10 @@ Py_NewInterpreter(void)
|
||||
Py_DECREF(pstderr);
|
||||
|
||||
_PyImportHooks_Init();
|
||||
|
||||
if (initfsencoding(interp) < 0)
|
||||
goto handle_error;
|
||||
|
||||
if (initstdio() < 0)
|
||||
Py_FatalError(
|
||||
"Py_Initialize: can't initialize sys standard streams");
|
||||
@@ -720,8 +725,8 @@ initmain(void)
|
||||
}
|
||||
}
|
||||
|
||||
static void
|
||||
initfsencoding(void)
|
||||
static int
|
||||
initfsencoding(PyInterpreterState *interp)
|
||||
{
|
||||
PyObject *codec;
|
||||
#if defined(HAVE_LANGINFO_H) && defined(CODESET)
|
||||
@@ -738,7 +743,8 @@ initfsencoding(void)
|
||||
|
||||
Py_FileSystemDefaultEncoding = codeset;
|
||||
Py_HasFileSystemDefaultEncoding = 0;
|
||||
return;
|
||||
interp->fscodec_initialized = 1;
|
||||
return 0;
|
||||
}
|
||||
#endif
|
||||
|
||||
@@ -748,10 +754,11 @@ initfsencoding(void)
|
||||
/* Such error can only occurs in critical situations: no more
|
||||
* memory, import a module of the standard library failed,
|
||||
* etc. */
|
||||
Py_FatalError("Py_Initialize: unable to load the file system codec");
|
||||
} else {
|
||||
Py_DECREF(codec);
|
||||
return -1;
|
||||
}
|
||||
Py_DECREF(codec);
|
||||
interp->fscodec_initialized = 1;
|
||||
return 0;
|
||||
}
|
||||
|
||||
/* Import the site module (not into __main__ though) */
|
||||
|
||||
Reference in New Issue
Block a user