Implement MappedFileData for Windows
authorchris.reid@sony.com <chris.reid@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 8 Jul 2019 19:09:24 +0000 (19:09 +0000)
committerchris.reid@sony.com <chris.reid@sony.com@268f45cc-cd09-0410-ab3c-d52691b4dbfc>
Mon, 8 Jul 2019 19:09:24 +0000 (19:09 +0000)
https://bugs.webkit.org/show_bug.cgi?id=198269

Reviewed by Darin Adler.

Source/WTF:

Original patch by Fujii Hironori.

Add Windows implementations for MappedFileData constructor and destructor.

* wtf/FileSystem.cpp:
* wtf/FileSystem.h:
* wtf/win/FileSystemWin.cpp:

Tools:

* TestWebKitAPI/PlatformWin.cmake:

git-svn-id: https://svn.webkit.org/repository/webkit/trunk@247225 268f45cc-cd09-0410-ab3c-d52691b4dbfc

Source/WTF/ChangeLog
Source/WTF/wtf/FileSystem.cpp
Source/WTF/wtf/win/FileSystemWin.cpp
Tools/ChangeLog
Tools/TestWebKitAPI/PlatformWin.cmake

index 80acbc3..ca46662 100644 (file)
@@ -1,3 +1,18 @@
+2019-07-08  Christopher Reid  <chris.reid@sony.com>
+
+        Implement MappedFileData for Windows
+        https://bugs.webkit.org/show_bug.cgi?id=198269
+
+        Reviewed by Darin Adler.
+
+        Original patch by Fujii Hironori.
+
+        Add Windows implementations for MappedFileData constructor and destructor.
+
+        * wtf/FileSystem.cpp:
+        * wtf/FileSystem.h:
+        * wtf/win/FileSystemWin.cpp:
+
 2019-07-08  Chris Dumez  <cdumez@apple.com>
 
         Add threading assertion to WTF::CompletionHandler
index ba49b1e..975429b 100644 (file)
@@ -274,21 +274,17 @@ bool excludeFromBackup(const String&)
 
 #endif
 
+#if HAVE(MMAP)
+
 MappedFileData::~MappedFileData()
 {
-#if !OS(WINDOWS)
     if (!m_fileData)
         return;
     munmap(m_fileData, m_fileSize);
-#endif
 }
 
 MappedFileData::MappedFileData(const String& filePath, bool& success)
 {
-#if OS(WINDOWS)
-    // FIXME: Implement mapping
-    success = false;
-#else
     CString fsRep = fileSystemRepresentation(filePath);
     int fd = !fsRep.isNull() ? open(fsRep.data(), O_RDONLY) : -1;
     if (fd < 0) {
@@ -327,9 +323,10 @@ MappedFileData::MappedFileData(const String& filePath, bool& success)
     success = true;
     m_fileData = data;
     m_fileSize = size;
-#endif
 }
 
+#endif
+
 PlatformFileHandle openAndLockFile(const String& path, FileOpenMode openMode, OptionSet<FileLockMode> lockMode)
 {
     auto handle = openFile(path, openMode);
index e473157..58c9344 100644 (file)
@@ -588,5 +588,44 @@ bool deleteNonEmptyDirectory(const String& directoryPath)
     return !SHFileOperation(&deleteOperation);
 }
 
+MappedFileData::~MappedFileData()
+{
+    if (!m_fileData)
+        return;
+    UnmapViewOfFile(m_fileData);
+}
+
+MappedFileData::MappedFileData(const String& filePath, bool& success)
+{
+    success = false;
+    auto file = CreateFile(filePath.wideCharacters().data(), GENERIC_READ, 0, nullptr, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, nullptr);
+    if (file == INVALID_HANDLE_VALUE)
+        return;
+
+    long long size;
+    if (!getFileSize(file, size) || size > std::numeric_limits<size_t>::max() || size > std::numeric_limits<decltype(m_fileSize)>::max()) {
+        CloseHandle(file);
+        return;
+    }
+
+    if (!size) {
+        CloseHandle(file);
+        success = true;
+        return;
+    }
+
+    auto mapping = CreateFileMapping(file, nullptr, PAGE_READONLY, 0, 0, nullptr);
+    CloseHandle(file);
+    if (!mapping)
+        return;
+
+    m_fileData = MapViewOfFile(mapping, FILE_MAP_READ, 0, 0, size);
+    CloseHandle(mapping);
+    if (!m_fileData)
+        return;
+    m_fileSize = size;
+    success = true;
+}
+
 } // namespace FileSystemImpl
 } // namespace WTF
index 22e0306..f006e74 100644 (file)
@@ -1,3 +1,12 @@
+2019-07-08  Christopher Reid  <chris.reid@sony.com>
+
+        Implement MappedFileData for Windows
+        https://bugs.webkit.org/show_bug.cgi?id=198269
+
+        Reviewed by Darin Adler.
+
+        * TestWebKitAPI/PlatformWin.cmake:
+
 2019-07-08  Charlie Turner  <cturner@igalia.com>
 
         REGRESSION(r243197): [GStreamer] Web process hangs when scrolling twitter timeline which contains HLS videos
index 0c48cf0..3493348 100644 (file)
@@ -17,7 +17,6 @@ set(test_main_SOURCES
 )
 
 # TestWTF
-list(REMOVE_ITEM TestWTF_SOURCES Tests/WTF/FileSystem.cpp)
 list(APPEND TestWTF_SOURCES
     ${test_main_SOURCES}
     win/UtilitiesWin.cpp