This commit is contained in:
Scott E. Graves 2024-12-20 21:11:11 -06:00
parent fe0c687f82
commit 5c7a5daf73

View File

@ -68,32 +68,36 @@ open_file::open_file(std::uint64_t chunk_size, std::uint8_t chunk_timeout,
throw startup_exception("cannot resume a directory|" + fsi.api_path);
}
if (not fsi.directory) {
nf_ = utils::file::file::open_or_create_file(fsi.source_path,
provider_.is_read_only());
set_api_error(*nf_ ? api_error::success : api_error::os_error);
if (get_api_error() == api_error::success) {
if (read_state.has_value()) {
read_state_ = read_state.value();
set_modified();
} else if (fsi_.size > 0U) {
read_state_.resize(static_cast<std::size_t>(utils::divide_with_ceiling(
fsi_.size, chunk_size)),
false);
if (fsi.directory) {
return;
}
auto file_size = nf_->size();
if (provider_.is_read_only() || file_size == fsi.size) {
read_state_.set(0U, read_state_.size(), true);
} else if (not nf_->truncate(fsi.size)) {
set_api_error(api_error::os_error);
}
}
nf_ = utils::file::file::open_or_create_file(fsi.source_path,
provider_.is_read_only());
set_api_error(*nf_ ? api_error::success : api_error::os_error);
if (get_api_error() != api_error::success) {
return;
}
if (get_api_error() != api_error::success && *nf_) {
nf_->close();
}
if (read_state.has_value()) {
read_state_ = read_state.value();
set_modified();
} else if (fsi_.size > 0U) {
read_state_.resize(static_cast<std::size_t>(
utils::divide_with_ceiling(fsi_.size, chunk_size)),
false);
auto file_size = nf_->size();
if (provider_.is_read_only() || file_size == fsi.size) {
read_state_.set(0U, read_state_.size(), true);
} else if (not nf_->truncate(fsi.size)) {
set_api_error(api_error::os_error);
}
}
if (get_api_error() != api_error::success && *nf_) {
nf_->close();
}
}
open_file::~open_file() { close(); }