]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
windows: Define WINAPI_FAMILY_PARTITION if missing
authorTobias Stoeckmann <tobias@stoeckmann.org>
Tue, 2 Jun 2026 20:26:17 +0000 (22:26 +0200)
committerTobias Stoeckmann <tobias@stoeckmann.org>
Tue, 2 Jun 2026 20:26:17 +0000 (22:26 +0200)
Define the macro WINAPI_FAMILY_PARTITION if it's missing, which can
happen on old Windows versions like Windows XP. Also add other missing
definitions to support compilation.

Signed-off-by: Tobias Stoeckmann <tobias@stoeckmann.org>
libarchive/archive_string.c
libarchive/archive_windows.c
libarchive/archive_windows.h
libarchive/archive_write_disk_windows.c
libarchive/filter_fork_windows.c

index 4fb96a9fa17895dd397acb30b20acb06b0ad71af..bbcec444b84386c1ab872a9053da11197690f4d2 100644 (file)
@@ -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
 
index 584d62a9612dbe199dbaf586a3c4919eaa2df7ba..b787a0d37688196712d17dc199b12db03fa018a4 100644 (file)
@@ -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,
index ecb14e01087b37670ba3b6587cb0d11b54a48fef..0d6fe8f73273964a119a7231795ef3553609ca8a 100644 (file)
@@ -299,6 +299,22 @@ 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 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)
index 54d92b397055f05956ae5e912b1e11e316396441..93156a7cdf218e575d991caef39967299f78797a 100644 (file)
@@ -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)
        f = CreateSymbolicLinkW;
 # else
        f = NULL;
index 9e49c5655f1d4883e5a1390852a18e4b6f03d2f1..7fe96fc594d09997232e2ca6df6da8678acd0926 100644 (file)
@@ -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. */