impr: Make file provider use atomic file IO instead of memory mappings

This commit is contained in:
WerWolv 2024-01-06 16:09:28 +01:00
parent f9ab16049b
commit c89d19cd27
2 changed files with 6 additions and 14 deletions

@ -1 +1 @@
Subproject commit 7efd66f8175549430d66092b1eed8ba0eed6e9c6
Subproject commit f7c78709e89f2c1c293ec60f897881e7e135580b

View File

@ -46,14 +46,14 @@ namespace hex::plugin::builtin {
if (m_fileSize == 0 || (offset + size) > m_fileSize || buffer == nullptr || size == 0)
return;
std::memcpy(buffer, m_file.getMapping() + offset, size);
m_file.readBufferAtomic(offset, static_cast<u8*>(buffer), size);
}
void FileProvider::writeRaw(u64 offset, const void *buffer, size_t size) {
if ((offset + size) > this->getActualSize() || buffer == nullptr || size == 0)
return;
std::memcpy(m_file.getMapping() + offset, buffer, size);
m_file.writeBufferAtomic(offset, static_cast<const u8*>(buffer), size);
}
void FileProvider::save() {
@ -229,23 +229,15 @@ namespace hex::plugin::builtin {
}
}
m_fileStats = file.getFileInfo();
m_file = std::move(file);
if (!m_file.map()) {
this->setErrorMessage(hex::format("hex.builtin.provider.file.error.open"_lang, m_path.string(), ::strerror(errno)));
return false;
}
m_fileSize = m_file.getSize();
m_file.close();
m_fileStats = m_file.getFileInfo();
m_fileSize = m_file.getSize();
return true;
}
void FileProvider::close() {
m_file.unmap();
m_file.close();
}
void FileProvider::loadSettings(const nlohmann::json &settings) {