From: Dustin L. Howett Date: Wed, 3 Jun 2026 04:58:40 +0000 (-0700) Subject: Merge pull request #3112 from stoeckmann/windows_partition X-Git-Tag: v3.8.8~56 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=fec46643b83f21746737101041b0ac64dedff7f7;p=thirdparty%2Flibarchive.git Merge pull request #3112 from stoeckmann/windows_partition (cherry picked from commit cc85a2cdf042dbb25e226dcf088ad53306876180) --- diff --git a/libarchive/archive_string.c b/libarchive/archive_string.c index 4fb96a9fa..bbcec444b 100644 --- a/libarchive/archive_string.c +++ b/libarchive/archive_string.c @@ -1372,7 +1372,7 @@ free_sconv_object(struct archive_string_conv *sc) } #if defined(_WIN32) && !defined(__CYGWIN__) -# if defined(WINAPI_FAMILY_PARTITION) && !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +# if !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) # define GetOEMCP() CP_OEMCP # endif diff --git a/libarchive/archive_windows.c b/libarchive/archive_windows.c index 584d62a96..b787a0d37 100644 --- a/libarchive/archive_windows.c +++ b/libarchive/archive_windows.c @@ -219,7 +219,7 @@ la_CreateFile(const char *path, DWORD dwDesiredAccess, DWORD dwShareMode, CREATEFILE2_EXTENDED_PARAMETERS createExParams; #endif -#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) +#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) handle = CreateFileA(path, dwDesiredAccess, dwShareMode, lpSecurityAttributes, dwCreationDisposition, dwFlagsAndAttributes, hTemplateFile); @@ -307,7 +307,7 @@ __la_open(const char *path, int flags, ...) * "Permission denied" error. */ attr = GetFileAttributesA(path); -#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) +#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) if (attr == (DWORD)-1 && GetLastError() == ERROR_PATH_NOT_FOUND) #endif { @@ -325,7 +325,7 @@ __la_open(const char *path, int flags, ...) } if (attr & FILE_ATTRIBUTE_DIRECTORY) { HANDLE handle; -#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) +#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) if (ws != NULL) handle = CreateFileW(ws, 0, 0, NULL, OPEN_EXISTING, @@ -420,7 +420,7 @@ __la_wopen(const wchar_t *path, int flags, ...) * "Permission denied" error. */ attr = GetFileAttributesW(path); -#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) +#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) if (attr == (DWORD)-1 && GetLastError() == ERROR_PATH_NOT_FOUND) #endif { @@ -439,7 +439,7 @@ __la_wopen(const wchar_t *path, int flags, ...) } if (attr & FILE_ATTRIBUTE_DIRECTORY) { HANDLE handle; -#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) +#if WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) if (fullpath != NULL) handle = CreateFileW(fullpath, 0, 0, NULL, OPEN_EXISTING, diff --git a/libarchive/archive_windows.h b/libarchive/archive_windows.h index ecb14e010..38a2b1b62 100644 --- a/libarchive/archive_windows.h +++ b/libarchive/archive_windows.h @@ -299,6 +299,26 @@ typedef int mbstate_t; size_t wcrtomb(char *, wchar_t, mbstate_t *); #endif +#ifndef WINAPI_FAMILY_PARTITION +#define WINAPI_FAMILY_PARTITION(x) (x) +#endif + +#ifndef WINAPI_PARTITION_DESKTOP +#define WINAPI_PARTITION_DESKTOP 1 +#endif + +#ifndef WINAPI_PARTITION_SYSTEM +#define WINAPI_PARTITION_SYSTEM 1 +#endif + +#ifndef NTDDI_VERSION +#define NTDDI_VERSION 0x05020000 +#endif + +#ifndef NTDDI_WIN10_VB +#define NTDDI_WIN10_VB 0x0A000008 +#endif + #if !WINAPI_FAMILY_PARTITION (WINAPI_PARTITION_DESKTOP) && NTDDI_VERSION < NTDDI_WIN10_VB // not supported in UWP SDK before 20H1 #define GetVolumePathNameW(f, v, c) (0) diff --git a/libarchive/archive_write_disk_windows.c b/libarchive/archive_write_disk_windows.c index 54d92b397..17f09e091 100644 --- a/libarchive/archive_write_disk_windows.c +++ b/libarchive/archive_write_disk_windows.c @@ -667,7 +667,7 @@ la_CreateSymbolicLinkW(const wchar_t *linkname, const wchar_t *target, f = la_GetFunctionKernel32("CreateSymbolicLinkW"); } #else -# if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM) f = CreateSymbolicLinkW; # else f = NULL; diff --git a/libarchive/filter_fork_windows.c b/libarchive/filter_fork_windows.c index 9e49c5655..7fe96fc59 100644 --- a/libarchive/filter_fork_windows.c +++ b/libarchive/filter_fork_windows.c @@ -31,7 +31,7 @@ #include "filter_fork.h" -#if !defined(WINAPI_FAMILY_PARTITION) || WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) +#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP) /* There are some editions of Windows ("nano server," for example) that * do not host user32.dll. If we want to keep running on those editions, * we need to delay-load WaitForInputIdle. */