]> git.ipfire.org Git - thirdparty/libarchive.git/commitdiff
Merge pull request #3108 from stoeckmann/windows_legacy
authorMartin Matuška <martin@matuska.de>
Tue, 9 Jun 2026 06:24:24 +0000 (08:24 +0200)
committerMartin Matuska <martin@matuska.de>
Tue, 23 Jun 2026 09:00:39 +0000 (11:00 +0200)
Reduce Windows legacy support

(cherry picked from commit 5c516433eed9ce3bec448e0c6aa3259ac2a2d75b)

cpio/cpio_windows.c
libarchive/archive_windows.h
libarchive/archive_write_disk_windows.c

index 144814186a1f2e3fcf518a5d66a4bc3368d431b2..ce50b9bdeb269d11a786835c7af31fef93380767 100644 (file)
@@ -140,7 +140,7 @@ cpio_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);
index 38a2b1b62dde889c2c6fa4e9d3e45d85e440965b..fef7cf90df4c4ef94ce53f6010d92f6c6e55fa20 100644 (file)
@@ -329,17 +329,4 @@ WINBASEAPI BOOL WINAPI GetVolumePathNameW(
        DWORD cchBufferLength
        );
 #endif
-#if defined(_MSC_VER) && _MSC_VER < 1300
-# if _WIN32_WINNT < 0x0500 /* windows.h not providing 0x500 API */
-typedef struct _FILE_ALLOCATED_RANGE_BUFFER {
-       LARGE_INTEGER FileOffset;
-       LARGE_INTEGER Length;
-} FILE_ALLOCATED_RANGE_BUFFER, *PFILE_ALLOCATED_RANGE_BUFFER;
-#  define FSCTL_SET_SPARSE \
-     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 49, METHOD_BUFFERED, FILE_WRITE_DATA)
-#  define FSCTL_QUERY_ALLOCATED_RANGES \
-     CTL_CODE(FILE_DEVICE_FILE_SYSTEM, 51,  METHOD_NEITHER, FILE_READ_DATA)
-# endif
-#endif
-
 #endif /* !LIBARCHIVE_ARCHIVE_WINDOWS_H_INCLUDED */
index 2b125d32cac95c5e5573c8ae69ac47f78e105c85..97845b8940f7b4ca688d3488acf5392167b26aaf 100644 (file)
@@ -580,45 +580,11 @@ la_mktemp(struct archive_write_disk *a)
        return (fd);
 }
 
-#if _WIN32_WINNT < _WIN32_WINNT_VISTA
-static void *
-la_GetFunctionKernel32(const char *name)
-{
-       static HINSTANCE lib;
-       static int set;
-       if (!set) {
-               set = 1;
-               lib = LoadLibrary(TEXT("kernel32.dll"));
-       }
-       if (lib == NULL) {
-               fprintf(stderr, "Can't load kernel32.dll?!\n");
-               exit(1);
-       }
-       return (void *)GetProcAddress(lib, name);
-}
-#endif
-
 static int
 la_CreateHardLinkW(wchar_t *linkname, wchar_t *target)
 {
-       static BOOL (WINAPI *f)(LPCWSTR, LPCWSTR, LPSECURITY_ATTRIBUTES);
        BOOL ret;
-
-#if _WIN32_WINNT < _WIN32_WINNT_XP
-       static int set;
-/* CreateHardLinkW is available since XP and always loaded */
-       if (!set) {
-               set = 1;
-               f = la_GetFunctionKernel32("CreateHardLinkW");
-       }
-#else
-       f = CreateHardLinkW;
-#endif
-       if (!f) {
-               errno = ENOTSUP;
-               return (0);
-       }
-       ret = (*f)(linkname, target, NULL);
+       ret = CreateHardLinkW(linkname, target, NULL);
        if (!ret) {
                /* Under windows 2000, it is necessary to remove
                 * the "\\?\" prefix. */
@@ -637,7 +603,7 @@ la_CreateHardLinkW(wchar_t *linkname, wchar_t *target)
                                target += 4;
                }
 #undef IS_UNC
-               ret = (*f)(linkname, target, NULL);
+               ret = CreateHardLinkW(linkname, target, NULL);
        }
        return (ret);
 }
@@ -651,30 +617,18 @@ la_CreateHardLinkW(wchar_t *linkname, wchar_t *target)
 static int
 la_CreateSymbolicLinkW(const wchar_t *linkname, const wchar_t *target,
     int linktype) {
-       static BOOLEAN (WINAPI *f)(LPCWSTR, LPCWSTR, DWORD);
+       BOOL ret = 0;
+#if _WIN32_WINNT < _WIN32_WINNT_VISTA ||\
+    !WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
+       (void)linkname; /* UNUSED */
+       (void)target; /* UNUSED */
+       (void)linktype; /* UNUSED */
+#else
        wchar_t *ttarget, *p;
        size_t len;
        DWORD attrs = 0;
        DWORD flags = 0;
        DWORD newflags = 0;
-       BOOL ret = 0;
-
-#if _WIN32_WINNT < _WIN32_WINNT_VISTA
-/* CreateSymbolicLinkW is available since Vista and always loaded */
-       static int set;
-       if (!set) {
-               set = 1;
-               f = la_GetFunctionKernel32("CreateSymbolicLinkW");
-       }
-#else
-# if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_DESKTOP | WINAPI_PARTITION_SYSTEM)
-       f = CreateSymbolicLinkW;
-# else
-       f = NULL;
-# endif
-#endif
-       if (!f)
-               return (0);
 
        len = wcslen(target);
        if (len == 0) {
@@ -736,15 +690,16 @@ la_CreateSymbolicLinkW(const wchar_t *linkname, const wchar_t *target,
                        disk_unlink(linkname);
        }
 
-       ret = (*f)(linkname, ttarget, newflags);
+       ret = CreateSymbolicLinkW(linkname, ttarget, newflags);
        /*
         * Prior to Windows 10 calling CreateSymbolicLinkW() will fail
         * if SYMBOLIC_LINK_FLAG_ALLOW_UNPRIVILEGED_CREATE is set
         */
        if (!ret) {
-               ret = (*f)(linkname, ttarget, flags);
+               ret = CreateSymbolicLinkW(linkname, ttarget, flags);
        }
        free(ttarget);
+#endif
        return (ret);
 }