You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by va...@apache.org on 2006/11/13 08:12:13 UTC
svn commit: r474176 -
/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/shared/DirectBufferUtil.c
Author: varlax
Date: Sun Nov 12 23:12:12 2006
New Revision: 474176
URL: http://svn.apache.org/viewvc?view=rev&rev=474176
Log:
Fixed JNI NIO impl:
- corrected signatures and parameters sizing;
- added prototype declarations as required by the stdcall calling convention;
- fixed PlatformAddressFactory class name.
Tested WinXP, SUSE9
Modified:
incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/shared/DirectBufferUtil.c
Modified: incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/shared/DirectBufferUtil.c
URL: http://svn.apache.org/viewvc/incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/shared/DirectBufferUtil.c?view=diff&rev=474176&r1=474175&r2=474176
==============================================================================
--- incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/shared/DirectBufferUtil.c (original)
+++ incubator/harmony/enhanced/classlib/trunk/modules/nio/src/main/native/nio/shared/DirectBufferUtil.c Sun Nov 12 23:12:12 2006
@@ -16,13 +16,16 @@
#include <jni.h>
+JNIEXPORT jobject JNICALL NewDirectByteBuffer(JNIEnv * , void*, jlong );
+JNIEXPORT void* JNICALL GetDirectBufferAddress(JNIEnv * , jobject );
+JNIEXPORT jlong JNICALL GetDirectBufferCapacity(JNIEnv * , jobject );
+
/*
- * For JNI
- * Method: NewDirectByteBuffer
- * Signature: (JJ)Ljava/nio/ByteBuffer;
+ * Reference implementation of NewDirectByteBuffer() functionality (JNI 1.4 NIO support).
+ * To be included to JNI function table either directly or wrapped.
*/
-jobject NewDirectByteBuffer
- (JNIEnv * env, jlong address, jlong capacity){
+JNIEXPORT jobject JNICALL NewDirectByteBuffer
+ (JNIEnv * env, void* address, jlong capacity){
jmethodID newBufferMethod;
jclass directBufferClass;
jclass platformaddressClass;
@@ -37,7 +40,7 @@
if (!newBufferMethod){
return NULL;
}
- platformaddressClass = (*env)->FindClass (env, "org/apache/harmony/luni/platform/PlatformAddress");
+ platformaddressClass = (*env)->FindClass (env, "org/apache/harmony/luni/platform/PlatformAddressFactory");
if (!platformaddressClass){
return NULL;
}
@@ -46,16 +49,17 @@
if (!onMethod){
return NULL;
}
- platformaddress = (*env)->CallStaticObjectMethod(env, platformaddressClass, onMethod, address);
- return (*env)->NewObject(env, directBufferClass, newBufferMethod, platformaddress, capacity, 0);
+ platformaddress = (*env)->CallStaticObjectMethod(env, platformaddressClass, onMethod, (jlong)address);
+ return (*env)->NewObject(env, directBufferClass, newBufferMethod,
+ platformaddress, (jint)capacity, (jint)0);
}
/*
- * For JNI
- * Method: GetDirectBufferAddress
- * Signature: (Ljava/nio/Buffer;)J
+ * Reference implementation of GetDirectBufferAddress() functionality
+ * (JNI 1.4 NIO support).
+ * To be included to JNI function table either directly or wrapped.
*/
-jlong GetDirectBufferAddress
+JNIEXPORT void* JNICALL GetDirectBufferAddress
(JNIEnv * env, jobject buf){
jmethodID tempMethod;
jclass tempClass;
@@ -85,15 +89,15 @@
if (!toLongMethod){
return 0;
}
- return (*env)->CallLongMethod(env, platformAddr, toLongMethod);
+ return (void*)(*env)->CallLongMethod(env, platformAddr, toLongMethod);
}
/*
- * For JNI
- * Method: GetDirectBufferCapacity
- * Signature: (Ljava/nio/Buffer;)J
+ * Reference implementation of GetDirectBufferCapacity() functionality
+ * (JNI 1.4 NIO support).
+ * To be included to JNI function table either directly or wrapped.
*/
-jlong GetDirectBufferCapacity
+JNIEXPORT jlong JNICALL GetDirectBufferCapacity
(JNIEnv * env, jobject buf){
jfieldID fieldCapacity;
jclass directBufferClass;
@@ -116,5 +120,3 @@
}
return (*env)->GetIntField(env, buf, fieldCapacity);
}
-
-