예제 #1
0
// 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;
}
예제 #2
0
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;
}