Commit 1a9f0d8e authored by Victor Stinner's avatar Victor Stinner Committed by GitHub

bpo-36763: Add _PyCoreConfig_SetString() (GH-13035)

Add 3 new config methods:

* _PyCoreConfig_SetString()
* _PyCoreConfig_SetWideString()
* _PyCoreConfig_SetWideStringFromString()

Changes:

* _PyCoreConfig_Copy() returns _PyInitError.
* Add CONFIG_GET_ENV_DUP().
parent 2fc936ed
...@@ -102,16 +102,24 @@ PyAPI_FUNC(_PyInitError) _PyPreConfig_Write(_PyPreConfig *config); ...@@ -102,16 +102,24 @@ PyAPI_FUNC(_PyInitError) _PyPreConfig_Write(_PyPreConfig *config);
/* --- _PyCoreConfig ---------------------------------------------- */ /* --- _PyCoreConfig ---------------------------------------------- */
PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *); PyAPI_FUNC(void) _PyCoreConfig_Clear(_PyCoreConfig *);
PyAPI_FUNC(int) _PyCoreConfig_Copy( PyAPI_FUNC(_PyInitError) _PyCoreConfig_Copy(
_PyCoreConfig *config, _PyCoreConfig *config,
const _PyCoreConfig *config2); const _PyCoreConfig *config2);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetString(
char **config_str,
const char *str);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetWideString(
wchar_t **config_str,
const wchar_t *str);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetWideStringFromString(
wchar_t **config_str,
const char *str);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config); PyAPI_FUNC(_PyInitError) _PyCoreConfig_InitPathConfig(_PyCoreConfig *config);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig( PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPathConfig(
const _PyCoreConfig *config); const _PyCoreConfig *config);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *config); PyAPI_FUNC(_PyInitError) _PyCoreConfig_Read(_PyCoreConfig *config);
PyAPI_FUNC(void) _PyCoreConfig_Write(const _PyCoreConfig *config, PyAPI_FUNC(void) _PyCoreConfig_Write(const _PyCoreConfig *config,
_PyRuntimeState *runtime); _PyRuntimeState *runtime);
PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPyArgv( PyAPI_FUNC(_PyInitError) _PyCoreConfig_SetPyArgv(
_PyCoreConfig *config, _PyCoreConfig *config,
const _PyArgv *args); const _PyArgv *args);
......
This diff is collapsed.
...@@ -472,6 +472,7 @@ _Py_Initialize_ReconfigureCore(_PyRuntimeState *runtime, ...@@ -472,6 +472,7 @@ _Py_Initialize_ReconfigureCore(_PyRuntimeState *runtime,
PyInterpreterState **interp_p, PyInterpreterState **interp_p,
const _PyCoreConfig *core_config) const _PyCoreConfig *core_config)
{ {
_PyInitError err;
PyThreadState *tstate = _PyThreadState_GET(); PyThreadState *tstate = _PyThreadState_GET();
if (!tstate) { if (!tstate) {
return _Py_INIT_ERR("failed to read thread state"); return _Py_INIT_ERR("failed to read thread state");
...@@ -485,13 +486,14 @@ _Py_Initialize_ReconfigureCore(_PyRuntimeState *runtime, ...@@ -485,13 +486,14 @@ _Py_Initialize_ReconfigureCore(_PyRuntimeState *runtime,
_PyCoreConfig_Write(core_config, runtime); _PyCoreConfig_Write(core_config, runtime);
if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) { err = _PyCoreConfig_Copy(&interp->core_config, core_config);
return _Py_INIT_NO_MEMORY(); if (_Py_INIT_FAILED(err)) {
return err;
} }
core_config = &interp->core_config; core_config = &interp->core_config;
if (core_config->_install_importlib) { if (core_config->_install_importlib) {
_PyInitError err = _PyCoreConfig_SetPathConfig(core_config); err = _PyCoreConfig_SetPathConfig(core_config);
if (_Py_INIT_FAILED(err)) { if (_Py_INIT_FAILED(err)) {
return err; return err;
} }
...@@ -545,8 +547,9 @@ pycore_create_interpreter(_PyRuntimeState *runtime, ...@@ -545,8 +547,9 @@ pycore_create_interpreter(_PyRuntimeState *runtime,
} }
*interp_p = interp; *interp_p = interp;
if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) { _PyInitError err = _PyCoreConfig_Copy(&interp->core_config, core_config);
return _Py_INIT_NO_MEMORY(); if (_Py_INIT_FAILED(err)) {
return err;
} }
core_config = &interp->core_config; core_config = &interp->core_config;
...@@ -804,8 +807,9 @@ pyinit_coreconfig(_PyRuntimeState *runtime, ...@@ -804,8 +807,9 @@ pyinit_coreconfig(_PyRuntimeState *runtime,
_PyInitError err; _PyInitError err;
if (src_config) { if (src_config) {
if (_PyCoreConfig_Copy(config, src_config) < 0) { err = _PyCoreConfig_Copy(config, src_config);
return _Py_INIT_NO_MEMORY(); if (_Py_INIT_FAILED(err)) {
return err;
} }
} }
...@@ -1433,8 +1437,9 @@ new_interpreter(PyThreadState **tstate_p) ...@@ -1433,8 +1437,9 @@ new_interpreter(PyThreadState **tstate_p)
core_config = &main_interp->core_config; core_config = &main_interp->core_config;
} }
if (_PyCoreConfig_Copy(&interp->core_config, core_config) < 0) { err = _PyCoreConfig_Copy(&interp->core_config, core_config);
return _Py_INIT_NO_MEMORY(); if (_Py_INIT_FAILED(err)) {
return err;
} }
core_config = &interp->core_config; core_config = &interp->core_config;
......
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment