From 0fc03adc2c209f59f4bead0b2269fc16c00007c2 Mon Sep 17 00:00:00 2001 From: Aki Date: Sat, 17 Sep 2022 13:49:30 +0200 Subject: Path normalization will now remove cwd from relative path --- ArchiveEx/Archive.cpp | 10 ++++++---- 1 file changed, 6 insertions(+), 4 deletions(-) diff --git a/ArchiveEx/Archive.cpp b/ArchiveEx/Archive.cpp index ad29c92..67cdb16 100644 --- a/ArchiveEx/Archive.cpp +++ b/ArchiveEx/Archive.cpp @@ -35,7 +35,7 @@ using UniqueFileHandle = std::unique_ptr; static inline std::size_t BytesToBlocks(std::size_t bytes); -static inline std::size_t ConvertPathSeparator(const char* src, char* dest); +static inline std::size_t NormalizePath(const char* src, char* dest); static constexpr std::uint32_t VERSION {0x0010}; @@ -129,7 +129,7 @@ int Archive::Find(const char* filepath) const { auto path = std::make_unique(std::strlen(filepath) + 1); - ConvertPathSeparator(filepath, path.get()); + NormalizePath(filepath, path.get()); for (std::size_t i = 0; i < entries.size(); ++i) { #ifdef _WIN32 if (0 == _stricmp(entries[i].name, path.get())) @@ -187,7 +187,7 @@ Archive::Insert(const char* filepath) for (std::size_t i = destination_block; i < destination_block + total_blocks; ++i) blocks[i] = index; auto normalized_path = std::make_unique(std::strlen(filepath) + 1); - ConvertPathSeparator(filepath, normalized_path.get()); + NormalizePath(filepath, normalized_path.get()); std::strcpy(entries[index].name, normalized_path.get()); entries[index].original_size = uncompressed_size; entries[index].compressed_size = compressed_size; @@ -356,8 +356,10 @@ BytesToBlocks(const std::size_t bytes) std::size_t -ConvertPathSeparator(const char* src, char* dest) +NormalizePath(const char* src, char* dest) { + if ('.' == src[0] && ('/' == src[1] || '\\' == src[1])) + return NormalizePath(&src[2], dest); std::size_t i; for (i = 0; 0 != src[i]; ++i) { if ('\\' == src[i]) -- cgit v1.1