diff options
| author | Victor Stinner <victor.stinner@haypocalc.com> | 2011-04-26 22:24:21 (GMT) | 
|---|---|---|
| committer | Victor Stinner <victor.stinner@haypocalc.com> | 2011-04-26 22:24:21 (GMT) | 
| commit | 3cbf14bfb11ce1f7f94a2a8e69161a621a200a5d (patch) | |
| tree | c37a2c102c11824fd902e0cc602af1b81ca53ddc /Python/pythonrun.c | |
| parent | 1188935af9ff5b762c6b1eaacb1dffdf0208bb40 (diff) | |
| download | cpython-3cbf14bfb11ce1f7f94a2a8e69161a621a200a5d.zip cpython-3cbf14bfb11ce1f7f94a2a8e69161a621a200a5d.tar.gz cpython-3cbf14bfb11ce1f7f94a2a8e69161a621a200a5d.tar.bz2 | |
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.
Diffstat (limited to 'Python/pythonrun.c')
| -rw-r--r-- | Python/pythonrun.c | 23 | 
1 files changed, 15 insertions, 8 deletions
| diff --git a/Python/pythonrun.c b/Python/pythonrun.c index 6251e30..faaf54a 100644 --- a/Python/pythonrun.c +++ b/Python/pythonrun.c @@ -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) */ | 
