From 305dd366422131d6ecfbb4ef97f3cb3edb712211 Mon Sep 17 00:00:00 2001 From: Alexander Taepper Date: Wed, 19 Jul 2023 11:44:07 +0200 Subject: [PATCH] feat: More robust InputStreamWrapper --- src/silo/common/input_stream_wrapper.cpp | 26 ++++++++++++------------ 1 file changed, 13 insertions(+), 13 deletions(-) diff --git a/src/silo/common/input_stream_wrapper.cpp b/src/silo/common/input_stream_wrapper.cpp index 9d7e4a288..9a1ffa47f 100644 --- a/src/silo/common/input_stream_wrapper.cpp +++ b/src/silo/common/input_stream_wrapper.cpp @@ -13,12 +13,12 @@ namespace { -std::filesystem::path appendXZ(const std::filesystem::path& filename) { - return {filename.string() + ".xz"}; +std::filesystem::path withXZending(const std::filesystem::path& filename) { + return {filename.extension() == ".xz" ? filename.string() : filename.string() + ".xz"}; } -std::filesystem::path appendZST(const std::filesystem::path& filename) { - return {filename.string() + ".zst"}; +std::filesystem::path withZSTending(const std::filesystem::path& filename) { + return {filename.extension() == ".zst" ? filename.string() : filename.string() + ".zst"}; } } // namespace @@ -26,17 +26,17 @@ std::filesystem::path appendZST(const std::filesystem::path& filename) { namespace silo { InputStreamWrapper::InputStreamWrapper(const std::filesystem::path& filename) : input_stream(std::make_unique()) { - if (std::filesystem::exists(filename)) { - SPDLOG_INFO("Detected file without specialized ending, processing raw: " + filename.string()); - file = std::ifstream(filename, std::ios::binary); - } else if (std::filesystem::exists(appendXZ(filename))) { - SPDLOG_INFO("Detected file-ending .xz for input file " + filename.string()); - file = std::ifstream(appendXZ(filename), std::ios::binary); - input_stream->push(boost::iostreams::lzma_decompressor()); - } else if (std::filesystem::exists(appendZST(filename))) { + if (std::filesystem::is_regular_file(withZSTending(filename))) { SPDLOG_INFO("Detected file-ending .zst for input file " + filename.string()); - file = std::ifstream(appendZST(filename), std::ios::binary); + file = std::ifstream(withZSTending(filename), std::ios::binary); input_stream->push(boost::iostreams::zstd_decompressor()); + } else if (std::filesystem::is_regular_file(withXZending(filename))) { + SPDLOG_INFO("Detected file-ending .xz for input file " + filename.string()); + file = std::ifstream(withXZending(filename), std::ios::binary); + input_stream->push(boost::iostreams::lzma_decompressor()); + } else if (std::filesystem::is_regular_file(filename)) { + SPDLOG_INFO("Detected file without specialized ending, processing raw: " + filename.string()); + file = std::ifstream(filename, std::ios::binary); } else { throw silo::PreprocessingException( "Cannot find file with name or associated endings (.xz, .zst): " + filename.string()