You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@commons.apache.org by mt...@apache.org on 2009/04/16 14:13:20 UTC
svn commit: r765590 - in /commons/sandbox/runtime/trunk/src:
main/java/org/apache/commons/runtime/ main/native/ main/native/include/
main/native/shared/ main/native/test/ test/org/apache/commons/runtime/
Author: mturk
Date: Thu Apr 16 12:13:20 2009
New Revision: 765590
URL: http://svn.apache.org/viewvc?rev=765590&view=rev
Log:
Add initial Pointer(Pointer32/Pointer64) classes
Added:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java (with props)
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java (with props)
commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h (with props)
commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (with props)
Modified:
commons/sandbox/runtime/trunk/src/main/native/Makefile.in
commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h
commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
commons/sandbox/runtime/trunk/src/main/native/shared/error.c
commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java?rev=765590&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Thu Apr 16 12:13:20 2009
@@ -0,0 +1,72 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+
+/** Represents the Operating System C/C++ pointer.
+ * <br/><br/>
+ * <b>Warning:</b><br/>Using this class improperly may crash the running JVM.
+ * @since Runtime 1.0
+ */
+public abstract class Pointer {
+
+ /*
+ * Pointer can be only created from native code.
+ * Suppress any instantiation except form internal classes.
+ */
+ protected Pointer()
+ {
+ // No Instance
+ }
+
+ private native void cleanup0()
+ throws Throwable;
+
+
+ /** True if the Pointer is 64-bit.
+ */
+ public static final boolean IS_64_BIT = OS.getDataModel() == 64 ? true : false;
+
+ /** Long value of the internal pointer
+ * @return Internal pointer address casted to the <code>long</code>.
+ */
+ public abstract long longValue();
+
+ /** Integer value of the internal pointer
+ * @return Internal pointer address casted to the <code>int</code>.
+ * @throws ClassCastException if the running JVM is 64 bit.
+ */
+ public abstract int intValue()
+ throws ClassCastException;
+
+ /**
+ * Called by the garbage collector when the object is destroyed.
+ * The class will free internal resources allocated by the Operating system.
+ * @see java.lang.Object for datailed explanation.
+ * @throws Throwable the <code>Exception</code> raised by this method.
+ */
+ protected final void finalize()
+ throws Throwable
+ {
+ cleanup0();
+ }
+
+ public void testCleanup()
+ throws Throwable
+ {
+ cleanup0();
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java?rev=765590&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java Thu Apr 16 12:13:20 2009
@@ -0,0 +1,45 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+
+/** Represents the Operating System 32-bit pointer C/C++ pointer.
+ * <br/><br/>
+ * <b>Warning:</b><br/>Using this class improperly may crash the running JVM.
+ * @since Runtime 1.0
+ */
+class Pointer32 extends Pointer {
+
+ private int POINTER;
+ private int CLEANUP;
+
+ private Pointer32(int ptr, int clr)
+ {
+ POINTER = ptr;
+ CLEANUP = clr;
+ }
+
+ public long longValue()
+ {
+ return POINTER;
+ }
+
+ public int intValue()
+ throws ClassCastException
+ {
+ return POINTER;
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java
------------------------------------------------------------------------------
svn:eol-style = native
Added: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java?rev=765590&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java (added)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java Thu Apr 16 12:13:20 2009
@@ -0,0 +1,45 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+package org.apache.commons.runtime;
+
+/** Represents the Operating System 32-bit pointer C/C++ pointer.
+ * <br/><br/>
+ * <b>Warning:</b><br/>Using this class improperly may crash the running JVM.
+ * @since Runtime 1.0
+ */
+class Pointer64 extends Pointer {
+
+ private long POINTER;
+ private long CLEANUP;
+
+ private Pointer64(long ptr, long clr)
+ {
+ POINTER = ptr;
+ CLEANUP = clr;
+ }
+
+ public long longValue()
+ {
+ return POINTER;
+ }
+
+ public int intValue()
+ throws ClassCastException
+ {
+ throw new ClassCastException();
+ }
+}
Propchange: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.in?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.in Thu Apr 16 12:13:20 2009
@@ -69,6 +69,7 @@
$(SRCDIR)/shared/dbb.$(OBJ) \
$(SRCDIR)/shared/error.$(OBJ) \
$(SRCDIR)/shared/memory.$(OBJ) \
+ $(SRCDIR)/shared/pointer.$(OBJ) \
$(SRCDIR)/shared/string.$(OBJ) \
$(SRCDIR)/shared/tables.$(OBJ) \
$(SRCDIR)/shared/version.$(OBJ)
Modified: commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in (original)
+++ commons/sandbox/runtime/trunk/src/main/native/Makefile.msc.in Thu Apr 16 12:13:20 2009
@@ -63,6 +63,7 @@
$(SRCDIR)/shared/dbb.$(OBJ) \
$(SRCDIR)/shared/error.$(OBJ) \
$(SRCDIR)/shared/memory.$(OBJ) \
+ $(SRCDIR)/shared/pointer.$(OBJ) \
$(SRCDIR)/shared/string.$(OBJ) \
$(SRCDIR)/shared/tables.$(OBJ) \
$(SRCDIR)/shared/version.$(OBJ)
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_clazz.h Thu Apr 16 12:13:20 2009
@@ -62,6 +62,22 @@
acr_cclass_e clazz,
jsize len);
+
+/**
+ * Load and reference the class.
+ * @param env Current JNI environment.
+ * @param clazz Class to load.
+ * @return ACR_SUCCESS on success.
+ */
+ACR_DECLARE(int) ACR_LoadClass(JNIEnv *env, JAVA_C_ID *clazz);
+
+/**
+ * UnLoad and dereference the class.
+ * @param env Current JNI environment.
+ * @param clazz Class to load.
+ */
+ACR_DECLARE(void) ACR_UnloadClass(JNIEnv *env, JAVA_C_ID *clazz);
+
#ifdef __cplusplus
}
#endif
Added: commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h?rev=765590&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h (added)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h Thu Apr 16 12:13:20 2009
@@ -0,0 +1,53 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#ifndef _ACR_POINTER_H
+#define _ACR_POINTER_H
+
+#include "acr.h"
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+/**
+ * @file acr_pointer.h
+ * @brief
+ *
+ * ACR Pointer class functions
+ *
+ */
+
+/**
+ * Pointer callback function prototype.
+ */
+typedef int (acr_pointer_callback_fn_t)(void *);
+
+/**
+ * Create new Pointer class instance
+ * param env Current JNI environment
+ * param p Native pointer to wrap into Pointer class
+ * param cb callback function to use on Pointer.finalize()
+ */
+ACR_DECLARE(jobject) ACR_CreatePointer(JNIEnv *env, void *p,
+ acr_pointer_callback_fn_t *cb);
+
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* _ACR_POINTER_H */
Propchange: commons/sandbox/runtime/trunk/src/main/native/include/acr_pointer.h
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h Thu Apr 16 12:13:20 2009
@@ -292,6 +292,12 @@
} else (void)(0)
+#define GET_IFIELD_J(I, O) \
+ _f##I##n.i ? (*_E)->GetLongField(_E, (O), _f##I##n.i) : 0
+
+#define GET_IFIELD_I(I, O) \
+ _f##I##n.i ? (*_E)->GetLongField(_E, (O), _f##I##n.i) : 0
+
#define SET_IFIELD_J(I, O, V) \
if (_f##I##n.i) { \
(*_E)->SetLongField(_E, (O), _f##I##n.i, (jlong)(V)); \
Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h Thu Apr 16 12:13:20 2009
@@ -102,6 +102,7 @@
ACR_EX_ENULL, /* java/lang/NullPointerException */
ACR_EX_EINVAL, /* java/lang/IllegalArgumentException */
ACR_EX_EINDEX, /* java/lang/IndexOutOfBoundsException */
+ ACR_EX_ECCAST, /* java/lang/ClassCastException */
ACR_EX_EIO, /* java/io/IOException */
ACR_EX_ESOCK /* java/net/SocketException */
} acr_trowclass_e;
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/clazz.c Thu Apr 16 12:13:20 2009
@@ -173,6 +173,74 @@
return NULL;
}
+ACR_DECLARE(int) ACR_LoadClass(JNIEnv *_E, JAVA_C_ID *clazz)
+{
+ int rv = ACR_SUCCESS;
+ jobject c;
+ char an[ACR_SBUFF_SIZ];
+
+ if (clazz->i != NULL) {
+ /* Already inited */
+ return rv;
+ }
+ if ((*_E)->EnsureLocalCapacity(_E, 3) < 0) {
+ goto failed;
+ }
+ /* Init class array */
+ sprintf(an, "L%s;", clazz->n);
+ c = (jobject)(*_E)->FindClass(_E, clazz->n);
+ if ((*_E)->ExceptionCheck(_E) || c == NULL) {
+ fprintf(stderr, "Failed 1 %s %p\n", clazz->n, c);
+ fflush(stderr);
+
+ goto failed;
+ }
+ clazz->i = (jclass)(*_E)->NewGlobalRef(_E, c);
+ if ((*_E)->ExceptionCheck(_E) || clazz->i == NULL) {
+ clazz->i = NULL;
+ fprintf(stderr, "Failed 2\n");
+ fflush(stderr);
+ goto failed;
+ }
+ (*_E)->DeleteLocalRef(_E, c);
+
+ /* Init class array */
+ sprintf(an, "L%s;", clazz->n);
+ c = (jobject)(*_E)->FindClass(_E, an);
+ if ((*_E)->ExceptionCheck(_E) || c == NULL) {
+ fprintf(stderr, "Failed 3\n");
+ fflush(stderr);
+ goto failed;
+ }
+ clazz->a = (jclass)(*_E)->NewGlobalRef(_E, c);
+ if ((*_E)->ExceptionCheck(_E) || clazz->a == NULL) {
+ clazz->a = NULL;
+ goto failed;
+ fprintf(stderr, "Failed 4\n");
+ fflush(stderr);
+ }
+ return rv;
+
+failed:
+ if (clazz->i != NULL) {
+ (*_E)->DeleteGlobalRef(_E, clazz->i);
+ clazz->i = NULL;
+ }
+ return ACR_EGENERAL;
+}
+
+ACR_DECLARE(void) ACR_UnloadClass(JNIEnv *_E, JAVA_C_ID *clazz)
+{
+ if (clazz->i != NULL) {
+ (*_E)->DeleteGlobalRef(_E, clazz->i);
+ clazz->i = NULL;
+ }
+ if (clazz->a != NULL) {
+ (*_E)->DeleteGlobalRef(_E, clazz->a);
+ clazz->a = NULL;
+ }
+}
+
#ifdef ACR_ENABLE_TEST
/* Just for testing the cache table */
int acr_clazz_cache_size()
Modified: commons/sandbox/runtime/trunk/src/main/native/shared/error.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/error.c?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/error.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/error.c Thu Apr 16 12:13:20 2009
@@ -29,6 +29,7 @@
"java/lang/NullPointerException",
"java/lang/IllegalArgumentException",
"java/lang/IndexOutOfBoundsException",
+ "java/lang/ClassCastException",
"java/io/IOException",
"java/net/SocketException",
NULL
Added: commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c?rev=765590&view=auto
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (added)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Thu Apr 16 12:13:20 2009
@@ -0,0 +1,143 @@
+/* Licensed to the Apache Software Foundation (ASF) under one or more
+ * contributor license agreements. See the NOTICE file distributed with
+ * this work for additional information regarding copyright ownership.
+ * The ASF licenses this file to You under the Apache License, Version 2.0
+ * (the "License"); you may not use this file except in compliance with
+ * the License. You may obtain a copy of the License at
+ *
+ * http://www.apache.org/licenses/LICENSE-2.0
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+/*
+ *
+ * @author Mladen Turk
+ */
+
+#include "acr.h"
+#include "acr_private.h"
+#include "acr_error.h"
+#include "acr_clazz.h"
+#include "acr_pointer.h"
+
+/**
+ * Pointer class utilities
+ */
+#if CC_SIZEOF_VOIDP == 8
+
+J_DECLARE_CLAZZ = {
+ NULL,
+ NULL,
+ ACR_CLASS_PATH "Pointer64"
+};
+
+J_DECLARE_F_ID(0000) = {
+ NULL,
+ "POINTER",
+ "J"
+};
+
+J_DECLARE_F_ID(0001) = {
+ NULL,
+ "CLEANUP",
+ "J"
+};
+
+J_DECLARE_M_ID(0000) = {
+ NULL,
+ "<init>",
+ "(JJ)V"
+};
+
+#else
+
+J_DECLARE_CLAZZ = {
+ NULL,
+ NULL,
+ ACR_CLASS_PATH "Pointer32"
+};
+
+J_DECLARE_F_ID(0000) = {
+ NULL,
+ "POINTER",
+ "I"
+};
+
+J_DECLARE_F_ID(0001) = {
+ NULL,
+ "CLEANUP",
+ "I"
+};
+
+J_DECLARE_M_ID(0000) = {
+ NULL,
+ "<init>",
+ "(II)V"
+};
+
+#endif
+
+ACR_CLASS_LDEF(Pointer)
+{
+ int rv;
+
+ if ((rv = ACR_LoadClass(_E, &_clazzn)) != ACR_SUCCESS)
+ return rv;
+ J_LOAD_IFIELD(0000);
+ J_LOAD_IFIELD(0001);
+ J_LOAD_METHOD(0000);
+
+ return ACR_SUCCESS;
+}
+
+ACR_CLASS_UDEF(Pointer)
+{
+ ACR_UnloadClass(_E, &_clazzn);
+}
+
+#if CC_SIZEOF_VOIDP == 8
+
+ACR_JNI_EXPORT_DECLARE(void, Pointer, cleanup0)(ACR_JNISTDARGS)
+{
+ acr_pointer_callback_fn_t *cleanup;
+ jlong h = GET_IFIELD_J(0000, _O);
+ jlong c = GET_IFIELD_J(0001, _O);
+
+ cleanup = (acr_pointer_callback_fn_t *)((acr_ptr_t)c);
+ if (cleanup) {
+ (*cleanup)((void *)((acr_ptr_t)h));
+ }
+ SET_IFIELD_J(0000, _O, 0);
+}
+
+#else
+
+ACR_JNI_EXPORT_DECLARE(void, Pointer, cleanup0)(ACR_JNISTDARGS)
+{
+ acr_pointer_callback_fn_t *cleanup;
+ jint h = GET_IFIELD_I(0000, _O);
+ jint c = GET_IFIELD_I(0001, _O);
+
+ cleanup = (acr_pointer_callback_fn_t *)((acr_ptr_t)c);
+ if (cleanup) {
+ (*cleanup)((void *)((acr_ptr_t)h));
+ }
+ SET_IFIELD_I(0000, _O, 0);
+}
+
+#endif
+
+ACR_DECLARE(jobject) ACR_CreatePointer(JNIEnv *_E, void *p,
+ acr_pointer_callback_fn_t *cb)
+{
+ if (_clazzn.i && _m0000n.i)
+ return (*_E)->NewObject(_E, _clazzn.i, _m0000n.i,
+ (acr_ptr_t)p, (acr_ptr_t)cb);
+ else
+ return NULL;
+}
Propchange: commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c
------------------------------------------------------------------------------
svn:eol-style = native
Modified: commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/test/testcase.c?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Thu Apr 16 12:13:20 2009
@@ -23,6 +23,7 @@
#include "acr_tables.h"
#include "acr_vm.h"
#include "acr_clazz.h"
+#include "acr_pointer.h"
/**
@@ -201,3 +202,23 @@
jobjectArray a = ACR_NewCoreObjectArray(_E, ACR_CC_STRING, d);
return a;
}
+
+ACR_CLASS_LDEC(Pointer);
+
+ACR_JNI_EXPORT_DECLARE(jint, TestPrivate, test016)(ACR_JNISTDARGS, jint d)
+{
+ ACR_CLASS_LRUN(Pointer);
+ return 0;
+}
+
+static void callback(void *p)
+{
+ fprintf(stderr, "Pointer callback called: %p\n", p);
+ fflush(stderr);
+}
+
+ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test017)(ACR_JNISTDARGS, jint d)
+{
+
+ return ACR_CreatePointer(_E, (void *)d, callback);
+}
Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java?rev=765590&r1=765589&r2=765590&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java (original)
+++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java Thu Apr 16 12:13:20 2009
@@ -55,6 +55,8 @@
private static native int test013(int d);
private static native Class test014(int d);
private static native String[] test015(int d);
+ private static native int test016(int d);
+ private static native Pointer test017(int d);
protected void setUp()
@@ -219,5 +221,23 @@
assertEquals("Size", 33, a.length);
}
+ public void testClassLoad()
+ throws Exception
+ {
+ // Shuold not be called as last
+ int i = test016(0);
+ assertEquals("Value", 0, i);
+ }
+
+ public void testPointerCb()
+ throws Throwable
+ {
+ // Shuold not be called as last
+ Pointer p = test017(0xcafebabe);
+ assertNotNull("Pointer",p);
+ p.testCleanup();
+ // Second invocation should display (nil)
+ p.testCleanup();
+ }
}