//----------------------------------------------------------------------- void ZipArchive::load() { if (!mZzipDir) { zzip_error_t zzipError; mZzipDir = zzip_dir_open(mName.c_str(), &zzipError); checkZzipError(zzipError, "opening archive"); // Cache names ZZIP_DIRENT zzipEntry; while (zzip_dir_read(mZzipDir, &zzipEntry)) { FileInfo info; info.archive = this; // Get basename / path StringUtil::splitFilename(zzipEntry.d_name, info.basename, info.path); // ignore folder entries if (info.basename.empty()) continue; info.filename = zzipEntry.d_name; // Get sizes info.compressedSize = static_cast<size_t>(zzipEntry.d_csize); info.uncompressedSize = static_cast<size_t>(zzipEntry.st_size); mFileList.push_back(info); } } }
void ZipResourceManager::populate() { zzip_error_t zzipError; ZZIP_DIR* zzipDir = zzip_dir_open(resourcePath.c_str(), &zzipError); checkZzipError(zzipError); ZZIP_DIRENT zzipEntry; while (zzip_dir_read(zzipDir, &zzipEntry)) { int compressedSize = zzipEntry.d_csize; int uncompressedSize = zzipEntry.st_size; std::string name = std::string(zzipEntry.d_name); files[name] = SDL_RWFromZZIP((resourcePath + "/" + name).c_str(), "rb"); } zzip_dir_close(zzipDir); }
//----------------------------------------------------------------------- void ZipArchive::load() { OGRE_LOCK_AUTO_MUTEX; if (!mZzipDir) { zzip_error_t zzipError; mZzipDir = zzip_dir_open_ext_io(mName.c_str(), &zzipError, 0, mPluginIo); checkZzipError(zzipError, "opening archive"); // Cache names ZZIP_DIRENT zzipEntry; while (zzip_dir_read(mZzipDir, &zzipEntry)) { FileInfo info; info.archive = this; // Get basename / path StringUtil::splitFilename(zzipEntry.d_name, info.basename, info.path); info.filename = zzipEntry.d_name; // Get sizes info.compressedSize = static_cast<size_t>(zzipEntry.d_csize); info.uncompressedSize = static_cast<size_t>(zzipEntry.st_size); // folder entries if (info.basename.empty()) { info.filename = info.filename.substr (0, info.filename.length () - 1); StringUtil::splitFilename(info.filename, info.basename, info.path); // Set compressed size to -1 for folders; anyway nobody will check // the compressed size of a folder, and if he does, its useless anyway info.compressedSize = size_t (-1); } #if !OGRE_RESOURCEMANAGER_STRICT else { info.filename = info.basename; } #endif mFileList.push_back(info); } } }