// files is an array of char * entries, last element must be NULL bool ExtractFiles(const char *archivePath, const char *dstDir, const char **files, Allocator *allocator) { size_t archiveDataSize; const char *archiveData = (const char*)file::ReadAllUtf(archivePath, &archiveDataSize); if (!archiveData) return false; SimpleArchive archive; bool ok = ParseSimpleArchive(archiveData, archiveDataSize, &archive); if (!ok) return false; int i = 0; for (;;) { const char *file = files[i++]; if (!file) break; ExtractFileByName(&archive, file, dstDir, allocator); } free((void*)archiveData); return true; }
bool ExtractFiles(const char *archivePath, const char *dstDir, const char **files, Allocator *allocator) { size_t archiveDataSize; char *archiveData = file::ReadAllUtf(archivePath, &archiveDataSize, allocator); if (!archiveData) return false; SimpleArchive archive; bool ok = ParseSimpleArchive(archiveData, archiveDataSize, &archive); if (!ok) { Allocator::Free(allocator, archiveData); return false; } for (; *files; files++) { int idx = GetIdxFromName(&archive, *files); if (-1 != idx) { ok &= ExtractFileByIdx(&archive, idx, dstDir, allocator); } } Allocator::Free(allocator, archiveData); return ok; }