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;
}