diff options
Diffstat (limited to 'Python')
-rw-r--r-- | Python/pylifecycle.c | 35 | ||||
-rw-r--r-- | Python/sysmodule.c | 16 |
2 files changed, 26 insertions, 25 deletions
diff --git a/Python/pylifecycle.c b/Python/pylifecycle.c index 37ecc51..f0e00ea 100644 --- a/Python/pylifecycle.c +++ b/Python/pylifecycle.c @@ -608,9 +608,6 @@ _Py_InitializeCore_impl(PyInterpreterState **interp_p, if (!_PyLong_Init()) return _Py_INIT_ERR("can't init longs"); - if (!PyByteArray_Init()) - return _Py_INIT_ERR("can't init bytearray"); - if (!_PyFloat_Init()) return _Py_INIT_ERR("can't init float"); @@ -634,9 +631,10 @@ _Py_InitializeCore_impl(PyInterpreterState **interp_p, PyDict_SetItemString(interp->sysdict, "modules", modules); _PyImport_FixupBuiltin(sysmod, "sys", modules); - /* Init Unicode implementation; relies on the codec registry */ - if (_PyUnicode_Init() < 0) - return _Py_INIT_ERR("can't initialize unicode"); + err = _PyUnicode_Init(); + if (_Py_INIT_FAILED(err)) { + return err; + } if (_PyStructSequence_Init() < 0) return _Py_INIT_ERR("can't initialize structseq"); @@ -651,7 +649,10 @@ _Py_InitializeCore_impl(PyInterpreterState **interp_p, Py_INCREF(interp->builtins); /* initialize builtin exceptions */ - _PyExc_Init(bimod); + err = _PyExc_Init(bimod); + if (_Py_INIT_FAILED(err)) { + return err; + } /* Set up a preliminary stderr printer until we have enough infrastructure for the io module in place. */ @@ -1146,7 +1147,6 @@ Py_FinalizeEx(void) PyList_Fini(); PySet_Fini(); PyBytes_Fini(); - PyByteArray_Fini(); PyLong_Fini(); PyFloat_Fini(); PyDict_Fini(); @@ -1302,7 +1302,10 @@ new_interpreter(PyThreadState **tstate_p) } /* initialize builtin exceptions */ - _PyExc_Init(bimod); + err = _PyExc_Init(bimod); + if (_Py_INIT_FAILED(err)) { + return err; + } if (bimod != NULL && sysmod != NULL) { PyObject *pstderr; @@ -1682,6 +1685,20 @@ init_sys_streams(PyInterpreterState *interp) _PyInitError res = _Py_INIT_OK(); _PyCoreConfig *config = &interp->core_config; + /* Check that stdin is not a directory + Using shell redirection, you can redirect stdin to a directory, + crashing the Python interpreter. Catch this common mistake here + and output a useful error message. Note that under MS Windows, + the shell already prevents that. */ +#ifndef MS_WINDOWS + struct _Py_stat_struct sb; + if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 && + S_ISDIR(sb.st_mode)) { + return _Py_INIT_USER_ERR("<stdin> is a directory, " + "cannot continue"); + } +#endif + char *codec_name = get_codec_name(config->stdio_encoding); if (codec_name == NULL) { return _Py_INIT_ERR("failed to get the Python codec name " diff --git a/Python/sysmodule.c b/Python/sysmodule.c index 5ea3772..8efe169 100644 --- a/Python/sysmodule.c +++ b/Python/sysmodule.c @@ -2381,22 +2381,6 @@ _PySys_BeginInit(PyObject **sysmod) } sysdict = PyModule_GetDict(m); - /* Check that stdin is not a directory - Using shell redirection, you can redirect stdin to a directory, - crashing the Python interpreter. Catch this common mistake here - and output a useful error message. Note that under MS Windows, - the shell already prevents that. */ -#ifndef MS_WINDOWS - { - struct _Py_stat_struct sb; - if (_Py_fstat_noraise(fileno(stdin), &sb) == 0 && - S_ISDIR(sb.st_mode)) { - return _Py_INIT_USER_ERR("<stdin> is a directory, " - "cannot continue"); - } - } -#endif - /* stdin/stdout/stderr are set in pylifecycle.c */ SET_SYS_FROM_STRING_BORROW("__displayhook__", |