From d36419b1e7781003130c768c003cc0d07dc4177d Mon Sep 17 00:00:00 2001 From: Max Bachmann Date: Thu, 15 May 2025 12:21:56 +0200 Subject: [PATCH 1/3] avoid unavailable win apis --- Modules/_winapi.c | 13 +++++++++++++ 1 file changed, 13 insertions(+) diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 02817e09b936f3..1636348b95156b 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1573,6 +1573,7 @@ static PyObject * _winapi_GetLongPathName_impl(PyObject *module, LPCWSTR path) /*[clinic end generated code: output=c4774b080275a2d0 input=9872e211e3a4a88f]*/ { +#if defined(MS_WINDOWS_APP) || defined(MS_WINDOWS_SYSTEM) DWORD cchBuffer; PyObject *result = NULL; @@ -1596,6 +1597,9 @@ _winapi_GetLongPathName_impl(PyObject *module, LPCWSTR path) PyErr_SetFromWindowsErr(0); } return result; +#else + return PyUnicode_FromWideChar(path, wcslen(path)); +#endif } /*[clinic input] @@ -1649,6 +1653,7 @@ static PyObject * _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) /*[clinic end generated code: output=dab6ae494c621e81 input=43fa349aaf2ac718]*/ { +#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM) DWORD cchBuffer; PyObject *result = NULL; @@ -1672,6 +1677,10 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) PyErr_SetFromWindowsErr(0); } return result; +#else + PyErr_SetString(PyExc_OSError, "GetShortPathName unavailable on this platform"); + return NULL; +#endif } /*[clinic input] @@ -2883,6 +2892,7 @@ _winapi_NeedCurrentDirectoryForExePath_impl(PyObject *module, LPCWSTR exe_name) /*[clinic end generated code: output=a65ec879502b58fc input=972aac88a1ec2f00]*/ { +#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM) BOOL result; Py_BEGIN_ALLOW_THREADS @@ -2890,6 +2900,9 @@ _winapi_NeedCurrentDirectoryForExePath_impl(PyObject *module, Py_END_ALLOW_THREADS return result; +#else + return TRUE; +#endif } From a2159225cfa4a6afca99e5fccb859ad9992af500 Mon Sep 17 00:00:00 2001 From: Max Bachmann Date: Thu, 15 May 2025 13:20:07 +0200 Subject: [PATCH 2/3] apply code review --- Modules/_winapi.c | 9 ++++++--- Modules/clinic/_winapi.c.h | 10 +++++++++- 2 files changed, 15 insertions(+), 4 deletions(-) diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 1636348b95156b..6a2e350450d661 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1598,7 +1598,7 @@ _winapi_GetLongPathName_impl(PyObject *module, LPCWSTR path) } return result; #else - return PyUnicode_FromWideChar(path, wcslen(path)); + return PyUnicode_FromWideChar(path, -1); #endif } @@ -1636,6 +1636,8 @@ _winapi_GetModuleFileName_impl(PyObject *module, HMODULE module_handle) return PyUnicode_FromWideChar(filename, wcslen(filename)); } +#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM) + /*[clinic input] _winapi.GetShortPathName @@ -1653,7 +1655,6 @@ static PyObject * _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) /*[clinic end generated code: output=dab6ae494c621e81 input=43fa349aaf2ac718]*/ { -#if defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM) DWORD cchBuffer; PyObject *result = NULL; @@ -1680,9 +1681,11 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) #else PyErr_SetString(PyExc_OSError, "GetShortPathName unavailable on this platform"); return NULL; -#endif + } +#endif /* MS_WINDOWS_DESKTOP || MS_WINDOWS_SYSTEM */ + /*[clinic input] _winapi.GetStdHandle -> HANDLE diff --git a/Modules/clinic/_winapi.c.h b/Modules/clinic/_winapi.c.h index f8b623fca082d2..b0fc1f1a89b760 100644 --- a/Modules/clinic/_winapi.c.h +++ b/Modules/clinic/_winapi.c.h @@ -857,6 +857,8 @@ _winapi_GetModuleFileName(PyObject *module, PyObject *arg) return return_value; } +#if (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM)) + PyDoc_STRVAR(_winapi_GetShortPathName__doc__, "GetShortPathName($module, /, path)\n" "--\n" @@ -930,6 +932,8 @@ _winapi_GetShortPathName(PyObject *module, PyObject *const *args, Py_ssize_t nar return return_value; } +#endif /* (defined(MS_WINDOWS_DESKTOP) || defined(MS_WINDOWS_SYSTEM)) */ + PyDoc_STRVAR(_winapi_GetStdHandle__doc__, "GetStdHandle($module, std_handle, /)\n" "--\n" @@ -2161,4 +2165,8 @@ _winapi_CopyFile2(PyObject *module, PyObject *const *args, Py_ssize_t nargs, PyO return return_value; } -/*[clinic end generated code: output=6cd07628af447d0a input=a9049054013a1b77]*/ + +#ifndef _WINAPI_GETSHORTPATHNAME_METHODDEF + #define _WINAPI_GETSHORTPATHNAME_METHODDEF +#endif /* !defined(_WINAPI_GETSHORTPATHNAME_METHODDEF) */ +/*[clinic end generated code: output=ede63eaaf63aa7e6 input=a9049054013a1b77]*/ From 1f29b518e8e678b0abdb9e21890a24c817a9b764 Mon Sep 17 00:00:00 2001 From: Max Bachmann Date: Thu, 15 May 2025 13:23:48 +0200 Subject: [PATCH 3/3] remove broken code --- Modules/_winapi.c | 4 ---- 1 file changed, 4 deletions(-) diff --git a/Modules/_winapi.c b/Modules/_winapi.c index 6a2e350450d661..0dea8d5ef172f9 100644 --- a/Modules/_winapi.c +++ b/Modules/_winapi.c @@ -1678,10 +1678,6 @@ _winapi_GetShortPathName_impl(PyObject *module, LPCWSTR path) PyErr_SetFromWindowsErr(0); } return result; -#else - PyErr_SetString(PyExc_OSError, "GetShortPathName unavailable on this platform"); - return NULL; - } #endif /* MS_WINDOWS_DESKTOP || MS_WINDOWS_SYSTEM */