summaryrefslogtreecommitdiffstats
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/corelib/io/qresource.cpp16
1 files changed, 16 insertions, 0 deletions
diff --git a/src/corelib/io/qresource.cpp b/src/corelib/io/qresource.cpp
index e40e7aeb0e0..df57d12efc8 100644
--- a/src/corelib/io/qresource.cpp
+++ b/src/corelib/io/qresource.cpp
@@ -37,6 +37,9 @@
# define QT_USE_MMAP
# include <sys/mman.h>
#endif
+#ifdef Q_OS_WIN
+# include <qt_windows.h>
+#endif
//#define DEBUG_RESOURCE_MATCH
@@ -1147,6 +1150,9 @@ void QDynamicFileResourceRoot::unmap_sys(void *base, qsizetype size)
{
#if defined(QT_USE_MMAP)
munmap(base, size);
+#elif defined(Q_OS_WIN)
+ Q_UNUSED(size)
+ UnmapViewOfFile(reinterpret_cast<void *>(base));
#endif
}
@@ -1166,6 +1172,16 @@ uchar *QDynamicFileResourceRoot::map_sys(QFile &file, qint64 offset, qsizetype s
ptr = QT_MMAP(nullptr, size, protection, flags, fd, offset);
if (ptr == MAP_FAILED)
ptr = nullptr;
+#elif defined(Q_OS_WIN)
+ int fd = file.handle();
+ HANDLE fileHandle = reinterpret_cast<HANDLE>(_get_osfhandle(fd));
+ if (fileHandle != INVALID_HANDLE_VALUE) {
+ HANDLE mapHandle = CreateFileMapping(fileHandle, 0, PAGE_WRITECOPY, 0, 0, 0);
+ if (mapHandle) {
+ ptr = MapViewOfFile(mapHandle, FILE_MAP_COPY, DWORD(offset >> 32), DWORD(offset), size);
+ CloseHandle(mapHandle);
+ }
+ }
#endif // QT_USE_MMAP
return static_cast<uchar *>(ptr);
}