summaryrefslogtreecommitdiffstats
path: root/Include/cpython/initconfig.h
diff options
context:
space:
mode:
authorVictor Stinner <vstinner@python.org>2020-06-08 16:12:59 (GMT)
committerGitHub <noreply@github.com>2020-06-08 16:12:59 (GMT)
commite81f6e687d0f04a45f2389d0b43fafd6d8491624 (patch)
tree58e75c8ff552241a84bb1f9b1904e06b1c88527f /Include/cpython/initconfig.h
parent8f023a2f664f902a3d0b7a6f64d63afc0d1c15ae (diff)
downloadcpython-e81f6e687d0f04a45f2389d0b43fafd6d8491624.zip
cpython-e81f6e687d0f04a45f2389d0b43fafd6d8491624.tar.gz
cpython-e81f6e687d0f04a45f2389d0b43fafd6d8491624.tar.bz2
bpo-40910: Export Py_GetArgcArgv() function (GH-20721)
Export explicitly the Py_GetArgcArgv() function to the C API and document the function. Previously, it was exported implicitly which no longer works since Python is built with -fvisibility=hidden. * Add PyConfig._orig_argv member. * Py_InitializeFromConfig() no longer calls _PyConfig_Write() twice. * PyConfig_Read() no longer initializes Py_GetArgcArgv(): it is now _PyConfig_Write() responsibility. * _PyConfig_Write() result type becomes PyStatus instead of void. * Write an unit test on Py_GetArgcArgv().
Diffstat (limited to 'Include/cpython/initconfig.h')
-rw-r--r--Include/cpython/initconfig.h16
1 files changed, 16 insertions, 0 deletions
diff --git a/Include/cpython/initconfig.h b/Include/cpython/initconfig.h
index 563c2ba..5793321 100644
--- a/Include/cpython/initconfig.h
+++ b/Include/cpython/initconfig.h
@@ -411,6 +411,14 @@ typedef struct {
/* If non-zero, disallow threads, subprocesses, and fork.
Default: 0. */
int _isolated_interpreter;
+
+ /* Original command line arguments. If _orig_argv is empty and _argv is
+ not equal to [''], PyConfig_Read() copies the configuration 'argv' list
+ into '_orig_argv' list before modifying 'argv' list (if parse_argv
+ is non-zero).
+
+ _PyConfig_Write() initializes Py_GetArgcArgv() to this list. */
+ PyWideStringList _orig_argv;
} PyConfig;
PyAPI_FUNC(void) PyConfig_InitPythonConfig(PyConfig *config);
@@ -436,5 +444,13 @@ PyAPI_FUNC(PyStatus) PyConfig_SetWideStringList(PyConfig *config,
PyWideStringList *list,
Py_ssize_t length, wchar_t **items);
+
+/* --- Helper functions --------------------------------------- */
+
+/* Get the original command line arguments, before Python modified them.
+
+ See also PyConfig._orig_argv. */
+PyAPI_FUNC(void) Py_GetArgcArgv(int *argc, wchar_t ***argv);
+
#endif /* !Py_LIMITED_API */
#endif /* !Py_PYCORECONFIG_H */