@@ -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