From ba71181d5e6fd35083a9e7a86c8e1a9592581398 Mon Sep 17 00:00:00 2001 From: Andrei Karas Date: Tue, 16 May 2017 19:04:21 +0300 Subject: Add subdir support in VirtFs::getFilesWithDir. --- src/fs/virtfs/fszip.cpp | 14 ++++++++++---- 1 file changed, 10 insertions(+), 4 deletions(-) (limited to 'src/fs/virtfs/fszip.cpp') diff --git a/src/fs/virtfs/fszip.cpp b/src/fs/virtfs/fszip.cpp index cc720f626..068b7ee45 100644 --- a/src/fs/virtfs/fszip.cpp +++ b/src/fs/virtfs/fszip.cpp @@ -317,7 +317,13 @@ namespace FsZip StringVect &names) { ZipEntry *const zipEntry = static_cast(entry); - if (dirName == dirSeparator) + const std::string subDir = zipEntry->subDir; + std::string dirNameFull; + if (subDir != dirSeparator) + dirNameFull = pathJoin(subDir, dirName); + else + dirNameFull = dirName; + if (dirNameFull == dirSeparator) { FOR_EACH (std::vector::const_iterator, it2, @@ -340,7 +346,7 @@ namespace FsZip } if (found == false) { - std::string dirName2 = pathJoin(dirName, fileName); + std::string dirName2 = pathJoin(dirNameFull, fileName); if (findLast(dirName2, std::string(dirSeparator)) == false) dirName2 += dirSeparator; FOR_EACH (std::vector::const_iterator, @@ -366,7 +372,7 @@ namespace FsZip { ZipLocalHeader *const header = *it2; std::string fileName = header->fileName; - if (findCutFirst(fileName, dirName) == true) + if (findCutFirst(fileName, dirNameFull) == true) { // skip subdirs from enumeration const size_t idx = fileName.find(dirSeparator); @@ -383,7 +389,7 @@ namespace FsZip } if (found == false) { - std::string dirName2 = pathJoin(dirName, fileName); + std::string dirName2 = pathJoin(dirNameFull, fileName); if (findLast(dirName2, std::string(dirSeparator)) == false) { -- cgit v1.2.3-60-g2f50