diff --git a/repertory/librepertory/src/file_manager/open_file.cpp b/repertory/librepertory/src/file_manager/open_file.cpp index 3ed17ce0..3e42f099 100644 --- a/repertory/librepertory/src/file_manager/open_file.cpp +++ b/repertory/librepertory/src/file_manager/open_file.cpp @@ -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(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( + 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(); }