Skip to content

Commit 21c9a6a

Browse files
authored
Windows: simplify conditional compilation and fix call to CreateFileMappingW. (yhirose#1909)
1 parent 7f6d413 commit 21c9a6a

File tree

1 file changed

+11
-18
lines changed

1 file changed

+11
-18
lines changed

httplib.h

Lines changed: 11 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -2847,9 +2847,7 @@ inline bool mmap::open(const char *path) {
28472847
wpath += path[i];
28482848
}
28492849

2850-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | \
2851-
WINAPI_PARTITION_GAMES) && \
2852-
(_WIN32_WINNT >= _WIN32_WINNT_WIN8)
2850+
#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
28532851
hFile_ = ::CreateFile2(wpath.c_str(), GENERIC_READ, FILE_SHARE_READ,
28542852
OPEN_EXISTING, NULL);
28552853
#else
@@ -2859,35 +2857,30 @@ inline bool mmap::open(const char *path) {
28592857

28602858
if (hFile_ == INVALID_HANDLE_VALUE) { return false; }
28612859

2862-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM | \
2863-
WINAPI_PARTITION_GAMES)
28642860
LARGE_INTEGER size{};
28652861
if (!::GetFileSizeEx(hFile_, &size)) { return false; }
2862+
// If the following line doesn't compile due to QuadPart, update Windows SDK.
2863+
// See:
2864+
// https://github.com/yhirose/cpp-httplib/issues/1903#issuecomment-2316520721
2865+
if (size.QuadPart > std::numeric_limits<decltype(size_)>::max()) {
2866+
// `size_t` might be 32-bits, on 32-bits Windows.
2867+
return false;
2868+
}
28662869
size_ = static_cast<size_t>(size.QuadPart);
2867-
#else
2868-
DWORD sizeHigh;
2869-
DWORD sizeLow;
2870-
sizeLow = ::GetFileSize(hFile_, &sizeHigh);
2871-
if (sizeLow == INVALID_FILE_SIZE) { return false; }
2872-
size_ = (static_cast<size_t>(sizeHigh) << (sizeof(DWORD) * 8)) | sizeLow;
2873-
#endif
28742870

2875-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) && \
2876-
(_WIN32_WINNT >= _WIN32_WINNT_WIN8)
2871+
#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
28772872
hMapping_ =
28782873
::CreateFileMappingFromApp(hFile_, NULL, PAGE_READONLY, size_, NULL);
28792874
#else
2880-
hMapping_ = ::CreateFileMappingW(hFile_, NULL, PAGE_READONLY, size.HighPart,
2881-
size.LowPart, NULL);
2875+
hMapping_ = ::CreateFileMappingW(hFile_, NULL, PAGE_READONLY, 0, 0, NULL);
28822876
#endif
28832877

28842878
if (hMapping_ == NULL) {
28852879
close();
28862880
return false;
28872881
}
28882882

2889-
#if WINAPI_FAMILY_PARTITION(WINAPI_PARTITION_APP | WINAPI_PARTITION_SYSTEM) && \
2890-
(_WIN32_WINNT >= _WIN32_WINNT_WIN8)
2883+
#if _WIN32_WINNT >= _WIN32_WINNT_WIN8
28912884
addr_ = ::MapViewOfFileFromApp(hMapping_, FILE_MAP_READ, 0, 0);
28922885
#else
28932886
addr_ = ::MapViewOfFile(hMapping_, FILE_MAP_READ, 0, 0, 0);

0 commit comments

Comments
 (0)