Handle the one case of ALL_PROCESSOR_GROUPS using GetSystemInfo; this can't return more than 64 cores, but that's probably good enough for a stub implementation.
Signed-off-by: Martin Storsjö <[email protected]> --- .../winstorecompat/Makefile.am | 2 + .../src/GetActiveProcessorCount.c | 44 +++++++++++++++++++ 2 files changed, 46 insertions(+) create mode 100644 mingw-w64-libraries/winstorecompat/src/GetActiveProcessorCount.c diff --git a/mingw-w64-libraries/winstorecompat/Makefile.am b/mingw-w64-libraries/winstorecompat/Makefile.am index 90a42be92..22a9eea8c 100644 --- a/mingw-w64-libraries/winstorecompat/Makefile.am +++ b/mingw-w64-libraries/winstorecompat/Makefile.am @@ -13,6 +13,7 @@ libwinstorecompat_a_SOURCES = \ src/Crypto.c \ src/EnumProcessModules.c \ src/GetACP.c \ + src/GetActiveProcessorCount.c \ src/GetConsoleOutputCP.c \ src/GetFileAttributes.c \ src/GetFileInformationByHandle.c \ @@ -52,6 +53,7 @@ libwinstorecompat_a_SOURCES = \ libwindowsappcompat_a_SOURCES = \ src/CreateFileW.c \ src/EnumProcessModules.c \ + src/GetActiveProcessorCount.c \ src/GetFileSize.c \ src/GetStartupInfo.c \ src/GetUserName.c \ diff --git a/mingw-w64-libraries/winstorecompat/src/GetActiveProcessorCount.c b/mingw-w64-libraries/winstorecompat/src/GetActiveProcessorCount.c new file mode 100644 index 000000000..439256ed0 --- /dev/null +++ b/mingw-w64-libraries/winstorecompat/src/GetActiveProcessorCount.c @@ -0,0 +1,44 @@ +/* + Copyright (c) 2025 mingw-w64 project + + Contributing authors: Martin Storsjo + + Permission is hereby granted, free of charge, to any person obtaining a + copy of this software and associated documentation files (the "Software"), + to deal in the Software without restriction, including without limitation + the rights to use, copy, modify, merge, publish, distribute, sublicense, + and/or sell copies of the Software, and to permit persons to whom the + Software is furnished to do so, subject to the following conditions: + + The above copyright notice and this permission notice shall be included in + all copies or substantial portions of the Software. + + THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR + IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, + FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE + AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER + LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING + FROM, OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER + DEALINGS IN THE SOFTWARE. +*/ + +#define GetActiveProcessorCount __GetActiveProcessorCount +#include <windows.h> +#undef GetActiveProcessorCount + +DWORD WINAPI GetActiveProcessorCount(WORD GroupNumber) +{ + if (GroupNumber == ALL_PROCESSOR_GROUPS) { + SYSTEM_INFO info; + GetSystemInfo(&info); + return info.dwNumberOfProcessors; + } + SetLastError(ERROR_INVALID_PARAMETER); + return 0; +} + +#ifdef _X86_ +DWORD (WINAPI *__MINGW_IMP_SYMBOL(GetActiveProcessorCount))(WORD) __asm__("__imp__GetActiveProcessorCount@4") = GetActiveProcessorCount; +#else +DWORD (WINAPI *__MINGW_IMP_SYMBOL(GetActiveProcessorCount))(WORD) __asm__("__imp_GetActiveProcessorCount") = GetActiveProcessorCount; +#endif -- 2.43.0 _______________________________________________ Mingw-w64-public mailing list [email protected] https://lists.sourceforge.net/lists/listinfo/mingw-w64-public
