summaryrefslogtreecommitdiffstats
path: root/Python/coreconfig.c
diff options
context:
space:
mode:
Diffstat (limited to 'Python/coreconfig.c')
-rw-r--r--Python/coreconfig.c31
1 files changed, 29 insertions, 2 deletions
diff --git a/Python/coreconfig.c b/Python/coreconfig.c
index 15643be..5202694 100644
--- a/Python/coreconfig.c
+++ b/Python/coreconfig.c
@@ -541,11 +541,15 @@ _PyCoreConfig_SetString(wchar_t **config_str, const wchar_t *str)
}
-/* Decode str using Py_DecodeLocale() and set the result into *config_str */
static _PyInitError
_PyCoreConfig_DecodeLocaleErr(wchar_t **config_str, const char *str,
const char *decode_err_msg)
{
+ _PyInitError err = _Py_PreInitialize(NULL);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
+
wchar_t *str2;
if (str != NULL) {
size_t len;
@@ -572,6 +576,9 @@ _PyCoreConfig_DecodeLocaleErr(wchar_t **config_str, const char *str,
_PyCoreConfig_DecodeLocaleErr(config_str, str, "cannot decode " NAME)
+/* Decode str using Py_DecodeLocale() and set the result into *config_str.
+ Pre-initialize Python if needed to ensure that encodings are properly
+ configured. */
_PyInitError
_PyCoreConfig_DecodeLocale(wchar_t **config_str, const char *str)
{
@@ -2100,10 +2107,30 @@ done:
_PyInitError
_PyCoreConfig_SetPyArgv(_PyCoreConfig *config, const _PyArgv *args)
{
+ if (args->use_bytes_argv) {
+ _PyInitError err;
+
+ err = _PyRuntime_Initialize();
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
+ _PyRuntimeState *runtime = &_PyRuntime;
+
+ /* do nothing if Python is already pre-initialized:
+ _PyCoreConfig_Write() will update _PyRuntime.preconfig later */
+ if (!runtime->pre_initialized) {
+ err = _Py_PreInitializeFromCoreConfig(config, args);
+ if (_Py_INIT_FAILED(err)) {
+ return err;
+ }
+ }
+ }
return _PyArgv_AsWstrList(args, &config->argv);
}
+/* Set config.argv: decode argv using Py_DecodeLocale(). Pre-initialize Python
+ if needed to ensure that encodings are properly configured. */
_PyInitError
_PyCoreConfig_SetArgv(_PyCoreConfig *config, int argc, char **argv)
{
@@ -2138,7 +2165,7 @@ _PyCoreConfig_Read(_PyCoreConfig *config)
{
_PyInitError err;
- err = _Py_PreInitializeFromCoreConfig(config);
+ err = _Py_PreInitializeFromCoreConfig(config, NULL);
if (_Py_INIT_FAILED(err)) {
return err;
}