From 30308ee3c0b1eccc6747aac0cbabb6bfb171dd18 Mon Sep 17 00:00:00 2001 From: Steve Lhomme Date: Mon, 23 Sep 2024 13:37:22 +0200 Subject: [PATCH] set_format: use GetNativeSystemInfo() to get the number of threads GetActiveProcessorCount() is not available in UWP [1] and it's not available before Windows 7. SYSTEM_INFO::dwNumberOfProcessors gives the same information [2] [1] https://learn.microsoft.com/en-us/windows/win32/api/winbase/nf-winbase-getactiveprocessorcount [2] https://learn.microsoft.com/en-us/windows/win32/api/sysinfoapi/ns-sysinfoapi-system_info --- libarchive/archive_write_add_filter_zstd.c | 6 +++--- libarchive/archive_write_set_format_7zip.c | 6 +++--- libarchive/archive_write_set_format_zip.c | 5 +++-- 3 files changed, 9 insertions(+), 8 deletions(-) diff --git a/libarchive/archive_write_add_filter_zstd.c b/libarchive/archive_write_add_filter_zstd.c index c0a6e5a3..0e2bdf44 100644 --- a/libarchive/archive_write_add_filter_zstd.c +++ b/libarchive/archive_write_add_filter_zstd.c @@ -280,9 +280,9 @@ archive_compressor_zstd_options(struct archive_write_filter *f, const char *key, #elif !defined(__CYGWIN__) && defined(_WIN32_WINNT) && \ _WIN32_WINNT >= 0x0601 /* _WIN32_WINNT_WIN7 */ if (threads == 0) { - DWORD winCores = GetActiveProcessorCount( - ALL_PROCESSOR_GROUPS); - threads = (intmax_t)winCores; + SYSTEM_INFO systemInfo; + GetNativeSystemInfo(&systemInfo); + threads = (intmax_t)systemInfo.dwNumberOfProcessors; } #endif if (threads < 0 || threads > INT_MAX) { diff --git a/libarchive/archive_write_set_format_7zip.c b/libarchive/archive_write_set_format_7zip.c index 902d03f6..793a2e8c 100644 --- a/libarchive/archive_write_set_format_7zip.c +++ b/libarchive/archive_write_set_format_7zip.c @@ -533,9 +533,9 @@ _7z_options(struct archive_write *a, const char *key, const char *value) threads = sysconf(_SC_NPROCESSORS_ONLN); #elif !defined(__CYGWIN__) && defined(_WIN32_WINNT) && \ _WIN32_WINNT >= 0x0601 /* _WIN32_WINNT_WIN7 */ - DWORD winCores = GetActiveProcessorCount( - ALL_PROCESSOR_GROUPS); - threads = (intmax_t)winCores; + SYSTEM_INFO systemInfo; + GetNativeSystemInfo(&systemInfo); + threads = (intmax_t)systemInfo.dwNumberOfProcessors; #else threads = 1; #endif diff --git a/libarchive/archive_write_set_format_zip.c b/libarchive/archive_write_set_format_zip.c index 3630b9f2..76356d40 100644 --- a/libarchive/archive_write_set_format_zip.c +++ b/libarchive/archive_write_set_format_zip.c @@ -453,8 +453,9 @@ archive_write_zip_options(struct archive_write *a, const char *key, zip->threads = sysconf(_SC_NPROCESSORS_ONLN); #elif !defined(__CYGWIN__) && defined(_WIN32_WINNT) && _WIN32_WINNT >= 0x0601 /* Windows 7 and up */ - DWORD activeProcs = GetActiveProcessorCount(ALL_PROCESSOR_GROUPS); - zip->threads = activeProcs <= SHRT_MAX ? (short)activeProcs : SHRT_MAX; + SYSTEM_INFO systemInfo; + GetNativeSystemInfo(&systemInfo); + zip->threads = systemInfo.dwNumberOfProcessors <= SHRT_MAX ? (short)systemInfo.dwNumberOfProcessors : SHRT_MAX; #else zip->threads = 1; #endif -- 2.47.2