From 515a8cf4005cb146052256ff4b9ac2de895849ae Mon Sep 17 00:00:00 2001 From: Tomaž Vajngerl Date: Mon, 17 Nov 2014 10:47:02 +0100 Subject: android: use ByteBuffer to send or store pointers in JNI bindings Using direct ByteBuffer is much nicer option to store or send pointers between C(++) code and Java via JNI as it handles endiness and pointer size for us. Using "long" type can have unexpected results in 32-bit architectures (mostly Android). This was causing grief especially when Android introduced support for 64-bit architectures starting with SDK 19. Change-Id: Ie92d0f913b668e1724e846d70d1820445d9cb086 --- sal/android/libreofficekit-jni.c | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) (limited to 'sal') diff --git a/sal/android/libreofficekit-jni.c b/sal/android/libreofficekit-jni.c index 416198234051..41fa97e8273d 100644 --- a/sal/android/libreofficekit-jni.c +++ b/sal/android/libreofficekit-jni.c @@ -147,13 +147,17 @@ jboolean Java_org_libreoffice_kit_LibreOfficeKit_initializeNative } __attribute__ ((visibility("default"))) -jlong Java_org_libreoffice_kit_LibreOfficeKit_getLibreOfficeKitHandle +jobject Java_org_libreoffice_kit_LibreOfficeKit_getLibreOfficeKitHandle (JNIEnv* env, jobject clazz) { + LibreOfficeKit* aOffice; + (void) env; (void) clazz; - return (jlong) (intptr_t) libreofficekit_hook(full_program_dir); + aOffice = libreofficekit_hook(full_program_dir); + + return (*env)->NewDirectByteBuffer(env, (void*) aOffice, sizeof(LibreOfficeKit)); } /* vim:set shiftwidth=4 softtabstop=4 expandtab: */ -- cgit