re PR libgcj/18115 (JNI nio buffer functions only work with byte buffers)

2005-01-07  Michael Koch  <konqueror@gmx.de>

	PR libgcj/18115
	* java/nio/Buffer.java (address): New field.
	* java/nio/DirectByteBufferImpl.java (address): Removed.
	* java/nio/MappedByteBufferImpl.java (address): Likewise.
	* java/nio/CharViewBufferImpl.java (CharViewBufferImpl):
	Explicitly initialize Buffer.address if needed.
	* java/nio/DoubleViewBufferImpl.java (DoubleViewBufferImpl): Likewise.
	* java/nio/FloatViewBufferImpl.java (FloatViewBufferImpl): Likewise.
	* java/nio/IntViewBufferImpl.java (IntViewBufferImpl): Likewise.
	* java/nio/LongViewBufferImpl.java (LongViewBufferImpl): Likewise.
	* java/nio/ShortViewBufferImpl.java (ShortViewBufferImpl): Likewise.
	* jni.cc (_Jv_JNI_GetDirectBufferAddress): Don't assume buffer is a
	DirectByteBufferImpl object.
	(_Jv_JNI_GetDirectBufferCapacity): Likewise.
	* testsuite/libjava.jni/directbuffer.c,
	testsuite/libjava.jni/directbuffer.java,
	testsuite/libjava.jni/directbuffer.out,
	testsuite/libjava.jni/bytebuffer.c,
	testsuite/libjava.jni/bytebuffer.java,
	testsuite/libjava.jni/bytebuffer.out: New files.

From-SVN: r93046
This commit is contained in:
Michael Koch 2005-01-07 11:32:07 +00:00 committed by Michael Koch
parent 4600cc1427
commit d2ba8a75ef
17 changed files with 319 additions and 6 deletions

View file

@ -41,6 +41,7 @@ details. */
#include <java/lang/ThreadGroup.h>
#include <java/lang/Thread.h>
#include <java/lang/IllegalAccessError.h>
#include <java/nio/Buffer.h>
#include <java/nio/DirectByteBufferImpl.h>
#include <java/nio/DirectByteBufferImpl$ReadWrite.h>
#include <java/util/IdentityHashMap.h>
@ -1733,16 +1734,22 @@ static void * JNICALL
_Jv_JNI_GetDirectBufferAddress (JNIEnv *, jobject buffer)
{
using namespace java::nio;
DirectByteBufferImpl* bb = static_cast<DirectByteBufferImpl *> (buffer);
return reinterpret_cast<void *> (bb->address);
if (! _Jv_IsInstanceOf (buffer, &Buffer::class$))
return NULL;
Buffer *tmp = static_cast<Buffer *> (buffer);
return reinterpret_cast<void *> (tmp->address);
}
static jlong JNICALL
_Jv_JNI_GetDirectBufferCapacity (JNIEnv *, jobject buffer)
{
using namespace java::nio;
DirectByteBufferImpl* bb = static_cast<DirectByteBufferImpl *> (buffer);
return bb->capacity();
if (! _Jv_IsInstanceOf (buffer, &Buffer::class$))
return -1;
Buffer *tmp = static_cast<Buffer *> (buffer);
if (tmp->address == NULL)
return -1;
return tmp->capacity();
}