size_t ZIPProvider::fileSize(const FileName & url) { std::lock_guard<std::mutex> lock(handlesMutex); std::string archiveFileName; FileName file; decomposeURL(url, archiveFileName, file); ZIPHandle * handle = getZIPHandle(archiveFileName); if (handle == nullptr) { return 0; } // Make sure all data has been written. if (handle->isChanged()) { delete handle; openHandles.erase(archiveFileName); handle = getZIPHandle(archiveFileName); } return handle->fileSize(file); }