bpo-38234: Py_SetPath() uses the program full path (GH-16357)
Py_SetPath() now sets sys.executable to the program full path
(Py_GetProgramFullPath()), rather than to the program name
(Py_GetProgramName()).
Fix also memory leaks in pathconfig_set_from_config().
diff --git a/Doc/c-api/init.rst b/Doc/c-api/init.rst
index 0f8ff3b..0b7a84d 100644
--- a/Doc/c-api/init.rst
+++ b/Doc/c-api/init.rst
@@ -472,8 +472,8 @@
dependent delimiter character, which is ``':'`` on Unix and Mac OS X, ``';'``
on Windows.
- This also causes :data:`sys.executable` to be set only to the raw program
- name (see :c:func:`Py_SetProgramName`) and for :data:`sys.prefix` and
+ This also causes :data:`sys.executable` to be set to the program
+ full path (see :c:func:`Py_GetProgramFullPath`) and for :data:`sys.prefix` and
:data:`sys.exec_prefix` to be empty. It is up to the caller to modify these
if required after calling :c:func:`Py_Initialize`.
@@ -483,6 +483,10 @@
The path argument is copied internally, so the caller may free it after the
call completes.
+ .. versionchanged:: 3.8
+ The program full path is now used for :data:`sys.executable`, instead
+ of the program name.
+
.. c:function:: const char* Py_GetVersion()
diff --git a/Doc/whatsnew/3.8.rst b/Doc/whatsnew/3.8.rst
index c2455f4..0995cb3 100755
--- a/Doc/whatsnew/3.8.rst
+++ b/Doc/whatsnew/3.8.rst
@@ -1347,6 +1347,11 @@
parameter for indicating the number of positional-only arguments.
(Contributed by Pablo Galindo in :issue:`37221`.)
+* :c:func:`Py_SetPath` now sets :data:`sys.executable` to the program full
+ path (:c:func:`Py_GetProgramFullPath`) rather than to the program name
+ (:c:func:`Py_GetProgramName`).
+ (Contributed by Victor Stinner in :issue:`38234`.)
+
Deprecated
==========