From b88909e0ae063574e30fed45486c725bdf983f30 Mon Sep 17 00:00:00 2001 From: kelson42 Date: Wed, 3 Apr 2013 12:11:20 +0200 Subject: [PATCH] + few new methods --- JNIKiwix.h | 6 +++--- JNIKiwix.java | 12 ++++++++++-- kiwix.c | 21 ++++++++++++++++++++- 3 files changed, 33 insertions(+), 6 deletions(-) diff --git a/JNIKiwix.h b/JNIKiwix.h index 640b76621..1f41e1bc5 100644 --- a/JNIKiwix.h +++ b/JNIKiwix.h @@ -18,10 +18,10 @@ JNIEXPORT jboolean JNICALL Java_JNIKiwix_nativeLoadZIM /* * Class: JNIKiwix * Method: nativeGetContent - * Signature: (Ljava/lang/String;)Ljava/lang/String; + * Signature: (Ljava/lang/String;LJNIKiwixString;LJNIKiwixInt;LJNIKiwixBool;)[B */ -JNIEXPORT jstring JNICALL Java_JNIKiwix_nativeGetContent - (JNIEnv *, jobject, jstring); +JNIEXPORT jbyteArray JNICALL Java_JNIKiwix_nativeGetContent + (JNIEnv *, jobject, jstring, jobject, jobject, jobject); #ifdef __cplusplus } diff --git a/JNIKiwix.java b/JNIKiwix.java index b0ace64c1..ed751ec5c 100644 --- a/JNIKiwix.java +++ b/JNIKiwix.java @@ -1,6 +1,7 @@ public class JNIKiwix { public native boolean nativeLoadZIM(String path); - public native byte[] nativeGetContent(String url, JNIKiwixString mimeType, JNIKiwixInt size); + public native byte[] nativeGetContent(String url, JNIKiwixString mimeType, + JNIKiwixInt size, JNIKiwixBool isOk); static { System.loadLibrary("kiwix"); @@ -14,8 +15,11 @@ public class JNIKiwix { JNIKiwixString mimeTypeObj = new JNIKiwixString(); JNIKiwixInt sizeObj = new JNIKiwixInt(); - self.nativeGetContent("/A/Wikipedia.html", mimeTypeObj, sizeObj); + JNIKiwixBool isOkObj = new JNIKiwixBool(); + self.nativeGetContent("/A/Wikipedia.html", mimeTypeObj, sizeObj, isOkObj); System.out.println(mimeTypeObj.value); + System.out.println(sizeObj.value); + System.out.println(isOkObj.value); } catch (Exception e) { System.out.println("Message " + e.getMessage()); @@ -32,4 +36,8 @@ class JNIKiwixString { class JNIKiwixInt { int value; +} + +class JNIKiwixBool { + boolean value; } \ No newline at end of file diff --git a/kiwix.c b/kiwix.c index 5141b3669..7b68ac4ef 100644 --- a/kiwix.c +++ b/kiwix.c @@ -41,12 +41,31 @@ void setStringObjValue(const std::string &value, const jobject obj, JNIEnv *env) env->SetObjectField(obj, objFid, c2jni(value, env)); } +void setIntObjValue(const int value, const jobject obj, JNIEnv *env) { + int tmp = value; + jclass objClass = env->GetObjectClass(obj); + jfieldID objFid = env->GetFieldID(objClass, "value", "I"); + env->SetIntField(obj, objFid, c2jni(tmp)); +} + +void setBoolObjValue(const bool value, const jobject obj, JNIEnv *env) { + jclass objClass = env->GetObjectClass(obj); + jfieldID objFid = env->GetFieldID(objClass, "value", "Z"); + env->SetIntField(obj, objFid, c2jni(value)); +} + /* Kiwix library functions */ JNIEXPORT jboolean JNICALL Java_JNIKiwix_nativeLoadZIM(JNIEnv *env, jobject obj, jstring path) { return c2jni(true); } JNIEXPORT jbyteArray JNICALL Java_JNIKiwix_nativeGetContent(JNIEnv *env, jobject obj, jstring url, - jobject mimeTypeObj, jobject sizeObj) { + jobject mimeTypeObj, jobject sizeObj, + jobject isOkObj) { setStringObjValue("42", mimeTypeObj, env); + setIntObjValue(42, sizeObj, env); + setBoolObjValue(false, isOkObj, env); + + // Java program dies otherwise (please keep this "useless" line) + std::cout << ""; }