error checks around performing the resize

this throws on windows and causes undefined mappings on linux
This commit is contained in:
Green Sky 2025-01-24 00:27:58 +01:00
parent db73c90e34
commit 1780bd097a
No known key found for this signature in database
2 changed files with 13 additions and 3 deletions

View File

@ -24,8 +24,18 @@ struct File2RWMapped : public File2I {
_file_size = std::filesystem::file_size(native_file_path);
if (file_size >= 0 && _file_size != file_size) {
_file_size = file_size;
try {
std::filesystem::resize_file(native_file_path, file_size); // ensure size, usually sparse
} catch (...) {
std::cerr << "FileRWMapped error: resizing file failed\n";
return;
}
_file_size = std::filesystem::file_size(native_file_path);
if (_file_size != file_size) {
std::cerr << "FileRWMapped error: resizing file failed (size mismatch)\n";
return;
}
}
std::error_code err;

View File

@ -28,7 +28,6 @@
#include "./re_announce_systems.hpp"
#include "./chunk_picker_systems.hpp"
#include "./transfer_stats_systems.hpp"
#include "solanaceae/object_store/object_store.hpp"
#include <iostream>
#include <filesystem>
@ -185,6 +184,7 @@ File2I* SHA1_NGCFT1::objGetFile2Write(ObjectHandle o) {
File2I* SHA1_NGCFT1::objGetFile2Read(ObjectHandle o) {
auto* file2_comp_ptr = o.try_get<Components::FT1File2>();
if (file2_comp_ptr == nullptr || !file2_comp_ptr->file || !file2_comp_ptr->file->can_read || !file2_comp_ptr->file->isGood()) {
std::cout << "SHA1_NGCFT1: (re)opening object " << entt::to_integral(entt::to_entity(o.entity())) << " for reading\n";
// (re)request file2 from backend
auto new_file = _mfb.file2(o, StorageBackendIFile2::FILE2_READ);
if (!new_file || !new_file->can_read || !new_file->isGood()) {