From 093c36f257a3beadd9c331f3d77050e5434a9c73 Mon Sep 17 00:00:00 2001 From: emeric Date: Sun, 30 Aug 2020 15:29:03 +0200 Subject: [PATCH] Zipper: fixed bug that corrupted filenames --- src/libs/utils/impl/Zipper.cpp | 4 ++-- src/tools/zipper/LmsZipper.cpp | 11 ++++++----- 2 files changed, 8 insertions(+), 7 deletions(-) diff --git a/src/libs/utils/impl/Zipper.cpp b/src/libs/utils/impl/Zipper.cpp index 95c64432..8c0f901e 100644 --- a/src/libs/utils/impl/Zipper.cpp +++ b/src/libs/utils/impl/Zipper.cpp @@ -292,7 +292,7 @@ namespace Zip const std::size_t nbBytesToCopy {std::min(fileName.size() - _currentOffset, bufferSize)}; - std::copy(std::next(std::begin(fileName), _currentOffset), std::next(std::begin(fileName), nbBytesToCopy), reinterpret_cast(buffer)); + std::copy(std::next(std::begin(fileName), _currentOffset), std::next(std::begin(fileName), _currentOffset + nbBytesToCopy), reinterpret_cast(buffer)); _currentOffset += nbBytesToCopy; return nbBytesToCopy; @@ -412,7 +412,7 @@ namespace Zip const std::size_t nbBytesToCopy {std::min(fileName.size() - _currentOffset, bufferSize)}; - std::copy(std::next(std::begin(fileName), _currentOffset), std::next(std::begin(fileName), nbBytesToCopy), reinterpret_cast(buffer)); + std::copy(std::next(std::begin(fileName), _currentOffset), std::next(std::begin(fileName), _currentOffset + nbBytesToCopy), reinterpret_cast(buffer)); _currentOffset += nbBytesToCopy; _centralDirectorySize += nbBytesToCopy; diff --git a/src/tools/zipper/LmsZipper.cpp b/src/tools/zipper/LmsZipper.cpp index d70b2bbb..bbeb8403 100644 --- a/src/tools/zipper/LmsZipper.cpp +++ b/src/tools/zipper/LmsZipper.cpp @@ -40,7 +40,10 @@ int main(int argc, char* argv[]) std::map files; for (int i {2}; i < argc; ++i) - files.emplace(argv[i], argv[i]); + { + std::filesystem::path path {argv[i]}; + files.emplace(path.relative_path(), path); + } std::cout << "Compressing " << files.size() << " files..." << std::endl; @@ -58,12 +61,10 @@ int main(int argc, char* argv[]) while (!zipper.isComplete()) { - std::array buffer; + //std::array buffer; + std::array buffer; - std::cout << "Call" << std::endl; std::size_t nbWrittenBytes {zipper.writeSome(buffer.data(), buffer.size())}; - std::cout << "nbWrittenBytes = " << nbWrittenBytes << std::endl; - ofs.write(reinterpret_cast(buffer.data()), nbWrittenBytes); }