Skip to content

Commit c8bcaf8

Browse files
authored
Fix build when targeting Windows 7 as platform. (#1869)
* Fix build when targeting Windows 7 as platform. This change makes more of the code introduced in #1775 conditional on feature macros. `CreateFile2`, `CreateFileMappingFromApp` and `MapViewOfFileFromApp` are available only starting from Windows 8. * https://learn.microsoft.com/en-us/windows/win32/api/fileapi/nf-fileapi-createfile2 * https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-createfilemappingfromapp * https://learn.microsoft.com/en-us/windows/win32/api/memoryapi/nf-memoryapi-mapviewoffilefromapp * Update feature macros used and use `GetFileSizeEx` conditionally.
1 parent 8cd0ed0 commit c8bcaf8

File tree

1 file changed

+15
-2
lines changed

1 file changed

+15
-2
lines changed

httplib.h

Lines changed: 15 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2824,16 +2824,29 @@ inline bool mmap::open(const char *path) {
28242824
wpath += path[i];
28252825
}
28262826

2827+
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES) && (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
28272828
hFile_ = ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ,
28282829
OPEN_EXISTING, NULL);
2830+
#else
2831+
hFile_ = ::CreateFileW(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ, NULL,
2832+
OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, NULL);
2833+
#endif
28292834

28302835
if (hFile_ == INVALID_HANDLE_VALUE) { return false; }
28312836

2837+
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | WINAPI_PARTITION_GAMES)
28322838
LARGE_INTEGER size{};
28332839
if (!::GetFileSizeEx(hFile_, &size)) { return false; }
28342840
size_ = static_cast<size_t>(size.QuadPart);
2841+
#else
2842+
DWORD sizeHigh;
2843+
DWORD sizeLow;
2844+
sizeLow = ::GetFileSize(hFile_, &sizeHigh);
2845+
if (sizeLow == INVALID_FILE_SIZE) { return false; }
2846+
size_ = (static_cast<size_t>(sizeHigh) << (sizeof(DWORD) * 8)) | sizeLow;
2847+
#endif
28352848

2836-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
2849+
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) && (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
28372850
hMapping_ =
28382851
::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL);
28392852
#else
@@ -2847,7 +2860,7 @@ inline bool mmap::open(const char *path) {
28472860
return false;
28482861
}
28492862

2850-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP)
2863+
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) && (_WIN32_WINNT >= _WIN32_WINNT_WIN8)
28512864
addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0);
28522865
#else
28532866
addr_ = ::MapViewOfFile(hMapping_, FILE_MAP_READ, 0, 0, 0);

0 commit comments

Comments
 (0)