diff --git a/src/io/devices/ZipFileDevice.cpp b/src/io/devices/ZipFileDevice.cpp index 15b8809c..947ef975 100644 --- a/src/io/devices/ZipFileDevice.cpp +++ b/src/io/devices/ZipFileDevice.cpp @@ -173,6 +173,20 @@ ZipFileDevice::ZipFileDevice( entries[entry.fileName] = std::move(entry); } + for (auto& [name, _] : entries) { + io::path path = name; + + while (!(path = path.parent()).pathPart().empty()) { + if (entries.find(path.pathPart()) != entries.end()) { + continue; + } + Entry entry {}; + entry.isDirectory = true; + entries[path.pathPart()] = entry; + } + break; + } + for (auto& [_, entry] : entries) { findBlob(entry); } @@ -243,6 +257,9 @@ bool ZipFileDevice::exists(std::string_view path) { } bool ZipFileDevice::isdir(std::string_view path) { + if (path.empty()) { + return true; + } const auto& found = entries.find(std::string(path)); if (found == entries.end()) { return false;