diff --git a/src/archiver.cpp b/src/archiver.cpp index 292ea4076632474ed0b90d3297a41658dcf25829..20a24975a504e6d2fc80a4b9c9e02346bd060a96 100644 --- a/src/archiver.cpp +++ b/src/archiver.cpp @@ -40,7 +40,6 @@ extern "C" { #include <mz_strm_os.h> #include <mz_zip.h> #include <mz_zip_rw.h> -#include <filesystem> #else #include <archive.h> #include <archive_entry.h> @@ -285,22 +284,26 @@ uncompressArchive(const std::string& archivePath, const std::string& dir, const fileutils::removeAll(dir, true); break; } - std::string_view filename(info->filename, (size_t)info->filename_size); + std::string_view filename(info->filename, (size_t) info->filename_size); const auto& fileMatchPair = f(filename); if (fileMatchPair.first) { auto filePath = dir + DIR_SEPARATOR_STR + fileMatchPair.second; - std::filesystem::path directory(filePath); - directory = directory.remove_filename(); - if (!std::filesystem::exists(directory)) - fileutils::check_dir(directory.c_str()); + std::string directory(filePath); + directory = directory.substr(0, directory.find_last_of(DIR_SEPARATOR_CH)); + fileutils::check_dir(directory.c_str()); mz_zip_reader_entry_open(zip_handle); void* buffStream = NULL; buffStream = mz_stream_os_create(&buffStream); - if (mz_stream_os_open(buffStream, filePath.c_str(), MZ_OPEN_MODE_WRITE | MZ_OPEN_MODE_CREATE) == MZ_OK) { + if (mz_stream_os_open(buffStream, + filePath.c_str(), + MZ_OPEN_MODE_WRITE | MZ_OPEN_MODE_CREATE) + == MZ_OK) { int chunkSize = 8192; std::vector<uint8_t> fileContent; fileContent.resize(chunkSize); - while (auto ret = mz_zip_reader_entry_read(zip_handle, (void*) fileContent.data(), chunkSize)) { + while (auto ret = mz_zip_reader_entry_read(zip_handle, + (void*) fileContent.data(), + chunkSize)) { ret = mz_stream_os_write(buffStream, (void*) fileContent.data(), ret); if (ret < 0) { fileutils::removeAll(dir, true); @@ -351,7 +354,8 @@ uncompressArchive(const std::string& archivePath, const std::string& dir, const break; } if (r != ARCHIVE_OK && r != ARCHIVE_WARN) { - throw std::runtime_error("Error reading archive: "s + archive_error_string(archiveReader.get())); + throw std::runtime_error("Error reading archive: "s + + archive_error_string(archiveReader.get())); } std::string_view fileEntry(archive_entry_pathname(entry)); @@ -416,11 +420,13 @@ readFileFromArchive(const std::string& archivePath, const std::string& fileRelat status = mz_zip_reader_entry_get_info(zip_handle, &info); if (status != MZ_OK) break; - std::string_view filename(info->filename, (size_t)info->filename_size); + std::string_view filename(info->filename, (size_t) info->filename_size); if (filename == fileRelativePathName) { mz_zip_reader_entry_open(zip_handle); fileContent.resize(info->uncompressed_size); - mz_zip_reader_entry_read(zip_handle, (void*) fileContent.data(), info->uncompressed_size); + mz_zip_reader_entry_read(zip_handle, + (void*) fileContent.data(), + info->uncompressed_size); mz_zip_reader_entry_close(zip_handle); status = -1; } else {