static u8 *utilLoadRarFile(const char *file, bool (*accept)(const char *), u8 *data, int &size) { char buffer[2048]; ArchiveList_struct *rarList = NULL; if(urarlib_list((void *)file, (ArchiveList_struct *)&rarList)) { ArchiveList_struct *p = rarList; bool found = false; while(p) { if(accept(p->item.Name)) { strcpy(buffer, p->item.Name); found = true; break; } p = p->next; } if(found) { void *memory = NULL; unsigned long lsize = 0; size = p->item.UnpSize; int r = urarlib_get((void *)&memory, &lsize, buffer, (void *)file, ""); if(!r) { systemMessage(MSG_ERROR_READING_IMAGE, N_("Error reading image %s"), buffer); urarlib_freelist(rarList); return NULL; } u8 *image = (u8 *)memory; if(data != NULL) { memcpy(image, data, size); } urarlib_freelist(rarList); return image; } systemMessage(MSG_NO_IMAGE_ON_ZIP, N_("No image found on RAR file %s"), file); urarlib_freelist(rarList); return NULL; } // nothing found return NULL; }
void ShellUnpacker::freeCompressedFile() { if(_unRARList) { urarlib_freelist(_unRARList); _unRARList = NULL; } }