mirror of
https://github.com/python/cpython.git
synced 2025-07-19 17:25:54 +00:00
bpo-36142: Rework error reporting in pymain_main() (GH-12113)
Add a new _Py_INIT_EXIT() macro to be able to exit Python with an exitcode using _PyInitError API. Rewrite function calls by pymain_main() to use _PyInitError. Changes: * Remove _PyMain.err and _PyMain.status field * Add _Py_INIT_EXIT() macro and _PyInitError.exitcode field. * Rename _Py_FatalInitError() to _Py_ExitInitError().
This commit is contained in:
parent
b9f0354efc
commit
dfe884759d
8 changed files with 191 additions and 229 deletions
|
@ -86,7 +86,7 @@ Py_FrozenMain(int argc, char **argv)
|
|||
/* No need to call _PyCoreConfig_Clear() since we didn't allocate any
|
||||
memory: program_name is a constant string. */
|
||||
if (_Py_INIT_FAILED(err)) {
|
||||
_Py_FatalInitError(err);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
||||
#ifdef MS_WINDOWS
|
||||
|
|
|
@ -408,7 +408,7 @@ pathconfig_global_init(void)
|
|||
|
||||
error:
|
||||
_PyCoreConfig_Clear(&config);
|
||||
_Py_FatalInitError(err);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -960,7 +960,7 @@ Py_InitializeEx(int install_sigs)
|
|||
_PyCoreConfig_Clear(&config);
|
||||
|
||||
if (_Py_INIT_FAILED(err)) {
|
||||
_Py_FatalInitError(err);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -1432,7 +1432,7 @@ Py_NewInterpreter(void)
|
|||
PyThreadState *tstate;
|
||||
_PyInitError err = new_interpreter(&tstate);
|
||||
if (_Py_INIT_FAILED(err)) {
|
||||
_Py_FatalInitError(err);
|
||||
_Py_ExitInitError(err);
|
||||
}
|
||||
return tstate;
|
||||
|
||||
|
@ -2073,12 +2073,17 @@ Py_FatalError(const char *msg)
|
|||
}
|
||||
|
||||
void _Py_NO_RETURN
|
||||
_Py_FatalInitError(_PyInitError err)
|
||||
_Py_ExitInitError(_PyInitError err)
|
||||
{
|
||||
/* On "user" error: exit with status 1.
|
||||
For all other errors, call abort(). */
|
||||
int status = err.user_err ? 1 : -1;
|
||||
fatal_error(err.prefix, err.msg, status);
|
||||
if (err.exitcode >= 0) {
|
||||
exit(err.exitcode);
|
||||
}
|
||||
else {
|
||||
/* On "user" error: exit with status 1.
|
||||
For all other errors, call abort(). */
|
||||
int status = err.user_err ? 1 : -1;
|
||||
fatal_error(err.prefix, err.msg, status);
|
||||
}
|
||||
}
|
||||
|
||||
/* Clean up and exit */
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue