From: Martin Matuška Date: Tue, 9 Jun 2026 06:24:24 +0000 (+0200) Subject: Merge pull request #3108 from stoeckmann/windows_legacy X-Git-Tag: v3.8.8~44 X-Git-Url: http://git.ipfire.org/gitweb.cgi?a=commitdiff_plain;h=c93ad88df80a1e0e01593df21fed78caa76f7ffd;p=thirdparty%2Flibarchive.git Merge pull request #3108 from stoeckmann/windows_legacy Reduce Windows legacy support (cherry picked from commit 5c516433eed9ce3bec448e0c6aa3259ac2a2d75b) --- diff --git a/cpio/cpio_windows.c b/cpio/cpio_windows.c index 144814186..ce50b9bde 100644 --- a/cpio/cpio_windows.c +++ b/cpio/cpio_windows.c @@ -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); diff --git a/libarchive/archive_windows.h b/libarchive/archive_windows.h index 38a2b1b62..fef7cf90d 100644 --- a/libarchive/archive_windows.h +++ b/libarchive/archive_windows.h @@ -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 */ diff --git a/libarchive/archive_write_disk_windows.c b/libarchive/archive_write_disk_windows.c index 2b125d32c..97845b894 100644 --- a/libarchive/archive_write_disk_windows.c +++ b/libarchive/archive_write_disk_windows.c @@ -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); }