From 03349a3953e0f217d686d88b99fa176509a27559 Mon Sep 17 00:00:00 2001 From: Stefan Ring Date: Sat, 22 Oct 2011 20:42:05 +0200 Subject: [PATCH] * src/native/jni.cpp: [OPENJDK] Implemented jni_GetDirectBufferCapacity. * src/vm/javaobjects.hpp: Added java_nio_Buffer::get_capacity. --- src/native/jni.cpp | 22 ++++++++++++++++++++-- src/vm/javaobjects.hpp | 6 ++++++ 2 files changed, 26 insertions(+), 2 deletions(-) diff --git a/src/native/jni.cpp b/src/native/jni.cpp index 6e850fd2b..661780662 100644 --- a/src/native/jni.cpp +++ b/src/native/jni.cpp @@ -1,6 +1,6 @@ /* src/native/jni.cpp - implementation of the Java Native Interface functions - Copyright (C) 1996-2005, 2006, 2007, 2008, 2009 + Copyright (C) 1996-2011 CACAOVM - Verein zur Foerderung der freien virtuellen Maschine CACAO This file is part of CACAO. @@ -3565,7 +3565,8 @@ void* jni_GetDirectBufferAddress(JNIEnv *env, jobject buf) jlong jni_GetDirectBufferCapacity(JNIEnv* env, jobject buf) { -#if defined(ENABLE_JAVASE) && defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH) +#if defined(ENABLE_JAVASE) +# if defined(WITH_JAVA_RUNTIME_LIBRARY_GNU_CLASSPATH) TRACEJNICALLS(("jni_GetDirectBufferCapacity(env=%p, buf=%p)", env, buf)); java_handle_t* h = (java_handle_t *) buf; @@ -3577,6 +3578,23 @@ jlong jni_GetDirectBufferCapacity(JNIEnv* env, jobject buf) jlong capacity = b.get_cap(); return capacity; +# elif defined(WITH_JAVA_RUNTIME_LIBRARY_OPENJDK) + + TRACEJNICALLS(("jni_GetDirectBufferCapacity(env=%p, buf=%p)", env, buf)); + + java_nio_Buffer jnb(buf); + + if (!builtin_instanceof(jnb.get_handle(), class_sun_nio_ch_DirectBuffer)) + return -1; + + jlong capacity = jnb.get_capacity(); + + return capacity; + +# else +# error unknown classpath configuration +# endif + #else vm_abort("jni_GetDirectBufferCapacity: not implemented in this configuration"); diff --git a/src/vm/javaobjects.hpp b/src/vm/javaobjects.hpp index f60026b97..b6061a1b8 100644 --- a/src/vm/javaobjects.hpp +++ b/src/vm/javaobjects.hpp @@ -2570,6 +2570,7 @@ public: // Getters. void* get_address() const; + int32_t get_capacity() const; }; @@ -2578,6 +2579,11 @@ inline void* java_nio_Buffer::get_address() const return get(_handle, offset_address); } +inline int32_t java_nio_Buffer::get_capacity() const +{ + return get(_handle, offset_capacity); +} + #endif // WITH_JAVA_RUNTIME_LIBRARY_OPENJDK -- 2.25.1