JNIEXPORT jobjectArray JNICALL Java_net_kervala_comicsreader_RarFile_nativeGetEntries(JNIEnv *env, jclass, jstring jFilename) { jobjectArray ret = NULL; const char *filename = env->GetStringUTFChars(jFilename, NULL); RAROpenArchiveData data; memset(&data, 0, sizeof(RAROpenArchiveData)); data.ArcName = (char*)filename; data.OpenMode = RAR_OM_LIST; HANDLE handle = RAROpenArchive(&data); if (handle && !data.OpenResult) { RARHeaderData header; memset(&header, 0, sizeof(RARHeaderData)); Strings list; // read all entries while (RARReadHeader(handle, &header) == 0) { // add file to list only if not a directory if ((header.Flags & LHD_DIRECTORY) != LHD_DIRECTORY) list.addString(header.FileName); // skip entry content int result = RARProcessFile(handle, RAR_SKIP, NULL, NULL); if (result) { LOGE("Unable to process %s, error: %d", header.FileName, result); } } RARCloseArchive(handle); size_t count = list.size(); if (count > 0) { ret = (jobjectArray)env->NewObjectArray(count, env->FindClass("java/lang/String"), NULL); Strings *tmp = &list; int i = 0; while(tmp) { env->SetObjectArrayElement(ret, i++, env->NewStringUTF(tmp->getString())); tmp = tmp->getNext(); } } } else { displayError(data.OpenResult, filename); } env->ReleaseStringUTFChars(jFilename, filename); return ret; }