mirror of
https://github.com/python/cpython.git
synced 2025-08-04 00:48:58 +00:00
pymain_set_sys_argv() now copies argv (#4838)
bpo-29240, bpo-32030: * Rename pymain_set_argv() to pymain_set_sys_argv() * pymain_set_sys_argv() now creates of copy of argv and modify the copy, rather than modifying pymain->argv * Call pymain_set_sys_argv() earlier: before pymain_run_python(), but after pymain_get_importer(). * Add _PySys_SetArgvWithError() to handle errors
This commit is contained in:
parent
981469794a
commit
d5dda98fa8
3 changed files with 89 additions and 36 deletions
|
@ -2446,17 +2446,34 @@ sys_update_path(int argc, wchar_t **argv)
|
|||
Py_DECREF(a);
|
||||
}
|
||||
|
||||
_PyInitError
|
||||
_PySys_SetArgvWithError(int argc, wchar_t **argv, int updatepath)
|
||||
{
|
||||
PyObject *av = makeargvobject(argc, argv);
|
||||
if (av == NULL) {
|
||||
return _Py_INIT_NO_MEMORY();
|
||||
}
|
||||
if (PySys_SetObject("argv", av) != 0) {
|
||||
Py_DECREF(av);
|
||||
return _Py_INIT_ERR("can't assign sys.argv");
|
||||
}
|
||||
Py_DECREF(av);
|
||||
|
||||
if (updatepath) {
|
||||
/* If argv[0] is not '-c' nor '-m', prepend argv[0] to sys.path.
|
||||
If argv[0] is a symlink, use the real path. */
|
||||
sys_update_path(argc, argv);
|
||||
}
|
||||
return _Py_INIT_OK();
|
||||
}
|
||||
|
||||
void
|
||||
PySys_SetArgvEx(int argc, wchar_t **argv, int updatepath)
|
||||
{
|
||||
PyObject *av = makeargvobject(argc, argv);
|
||||
if (av == NULL)
|
||||
Py_FatalError("no mem for sys.argv");
|
||||
if (PySys_SetObject("argv", av) != 0)
|
||||
Py_FatalError("can't assign sys.argv");
|
||||
Py_DECREF(av);
|
||||
if (updatepath)
|
||||
sys_update_path(argc, argv);
|
||||
_PyInitError err = _PySys_SetArgvWithError(argc, argv, updatepath);
|
||||
if (_Py_INIT_FAILED(err)) {
|
||||
_Py_FatalInitError(err);
|
||||
}
|
||||
}
|
||||
|
||||
void
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue