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/17 09:39:30 UTC

svn commit: r765881 - 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: Fri Apr 17 07:39:29 2009
New Revision: 765881

URL: http://svn.apache.org/viewvc?rev=765881&view=rev
Log:
Code update

Modified:
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java
    commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java
    commons/sandbox/runtime/trunk/src/main/native/configure
    commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr_private.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr_tables.h
    commons/sandbox/runtime/trunk/src/main/native/include/acr_types.h
    commons/sandbox/runtime/trunk/src/main/native/shared/error.c
    commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c
    commons/sandbox/runtime/trunk/src/main/native/shared/tables.c
    commons/sandbox/runtime/trunk/src/main/native/test/testcase.c
    commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestPrivate.java

Modified: 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=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java Fri Apr 17 07:39:29 2009
@@ -25,7 +25,7 @@
 public abstract class Pointer {
 
     /*
-     * Pointer can be only created from native code.
+     * Pointer can only be created from the native code.
      * Suppress any instantiation except form internal classes.
      */
     protected Pointer()
@@ -36,9 +36,10 @@
     private native void cleanup0()
         throws Throwable;
 
-    /** True if the Pointer is 64-bit.
+    /**
+     * Size in bytes of the storage needed to represent the Pointer.
      */
-    public static final boolean IS_64_BIT = OS.getDataModel() == 64 ? true : false;
+    public static final int SIZEOF = OS.getDataModel() == 64 ? 8 : 4;
 
     /** Long value of the internal pointer
      * @return Internal pointer address casted to the {@code long}.
@@ -47,17 +48,22 @@
 
     /** Integer value of the internal pointer
      * @return Internal pointer address casted to the {@code int}.
-     * @throws ClassCastException if the running JVM is 64 bit.
+     * @throws ClassCastException if running on the 64-bit JVM.
      */
     public abstract int intValue()
         throws ClassCastException;
 
+    /** Chack if the pointer is valid
+     * @return true if the internal pointer is not {@code NULL}.
+     */
+    public abstract boolean IsNull();
+
     /**
      * Called by the garbage collector when the object is destroyed.
      * The class will free internal resources allocated by the Operating system.
      * @see Object#finalize()
      * @throws Throwable the {@code Exception} raised by this method.
-     */    
+     */
     protected final void finalize()
         throws Throwable
     {
@@ -73,11 +79,19 @@
      * </p>
      * @see #finalize()
      * @throws Throwable the {@code Exception} raised by this method.
-     */    
-    public void free()
+     */
+    public final void free()
         throws Throwable
     {
         cleanup0();
     }
 
+    /**
+     * Returns a string representation of the Pointer.
+     * The returned string is hexadecimal representation of the underlying
+     * pointer.
+     * @return a hexadecimal representation of the pointer.
+     */
+    public abstract String toString();
+
 }

Modified: 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=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer32.java Fri Apr 17 07:39:29 2009
@@ -24,15 +24,23 @@
  */
 class Pointer32 extends Pointer {
 
-    private int POINTER;
-    private int CLEANUP;
+    private int     POINTER;
+    private int     CLEANUP;
 
+    /*
+     * Only created from JNI code.
+     */
     private Pointer32(int ptr, int clr)
     {
         POINTER = ptr;
         CLEANUP = clr;
     }
 
+    public boolean IsNull()
+    {
+        return POINTER == 0;
+    }
+
     public long longValue()
     {
         return POINTER;
@@ -43,4 +51,11 @@
     {
         return POINTER;
     }
+
+    public String toString()
+    {
+        String h = Integer.toHexString(POINTER);
+        return "0x" + ("00000000" + h).substring(h.length());
+    }
+
 }

Modified: 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=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java (original)
+++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer64.java Fri Apr 17 07:39:29 2009
@@ -24,15 +24,23 @@
  */
 class Pointer64 extends Pointer {
 
-    private long POINTER;
-    private long CLEANUP;
+    private long    POINTER;
+    private long    CLEANUP;
 
+    /*
+     * Only created from JNI code.
+     */
     private Pointer64(long ptr, long clr)
     {
         POINTER = ptr;
         CLEANUP = clr;
     }
 
+    public boolean IsNull()
+    {
+        return POINTER == 0L;
+    }
+
     public long longValue()
     {
         return POINTER;
@@ -43,4 +51,11 @@
     {
         throw new ClassCastException();
     }
+
+    public String toString()
+    {
+        String h = Long.toHexString(POINTER);
+        return "0x" + ("0000000000000000" + h).substring(h.length());
+    }
+
 }

Modified: commons/sandbox/runtime/trunk/src/main/native/configure
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/configure?rev=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/configure (original)
+++ commons/sandbox/runtime/trunk/src/main/native/configure Fri Apr 17 07:39:29 2009
@@ -445,6 +445,7 @@
 #include <stdio.h>
 #include <stdlib.h>
 #include <sys/types.h>
+#include <wctype.h>
 
 int main() {printf("%d", sizeof($1));return 0;}
 EOF
@@ -458,6 +459,18 @@
     echo $rc
 }
 
+sizeof_int="`test_csizeof int`"
+if [ ".$sizeof_int" = ".0" ]; then
+    echo "[ERROR] Cannot determine the size of int." 1>&2
+    exit 1
+fi
+
+sizeof_wchar="`test_csizeof wchar_t`"
+if [ ".$sizeof_wchar" = ".0" ]; then
+    echo "[ERROR] Cannot determine the size of wchar_t." 1>&2
+    exit 1
+fi
+
 # Generate configuration header file
 #
 cat > $topdir/include/ccconfig.h << EOF
@@ -500,12 +513,13 @@
 
 #define HAS_BIG_ENDIAN        $bige
 
-#define CC_SIZEOF_INT         `test_csizeof int`
+#define CC_SIZEOF_INT         $sizeof_int
 #define CC_SIZEOF_LONG        `test_csizeof long`
 #define CC_SIZEOF_LONG_LONG   `test_csizeof 'long long'`
 #define CC_SIZEOF_VOIDP       `test_csizeof 'void *'`
 #define CC_SIZEOF_SIZE_T      `test_csizeof size_t`
 #define CC_SIZEOF_OFF64_T     `test_csizeof off64_t`
+#define CC_SIZEOF_WCHAR_T     $sizeof_wchar
 
 EOF
 

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h?rev=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_error.h Fri Apr 17 07:39:29 2009
@@ -35,6 +35,20 @@
 #define THROW_FMARK  __FILE__, __LINE__
 #define THROW_NMARK  NULL, 0
 
+/* Exception class enums */
+typedef enum {
+    ACR_EX_EGENERAL = 0,    /* java/lang/Exception */
+    ACR_EX_ERUNTIME,        /* java/lang/RuntimeException */
+    ACR_EX_ENOMEM,          /* java/lang/OutOfMemoryError */
+    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_ESYNC,           /* java/io/SyncFailedException */
+    ACR_EX_ESOCK            /* java/net/SocketException */
+} acr_trowclass_e;
+
 /*
  * Convenience function to help throw any class
  * @param env JNI Environment

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=765881&r1=765880&r2=765881&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 Fri Apr 17 07:39:29 2009
@@ -76,21 +76,39 @@
 #define ZSTR_TO_JSTRING(V, L)   (*_E)->NewString(_E, (const jchar *)(V), (L))
 
 #define CSTR_DECLARE(V)     \
-    const char *_c##V = V ? (const char *)((*_E)->GetStringUTFChars(_E, V, 0)) : NULL
+    const char *_c##V = V ? (const char *)((*_E)->GetStringUTFChars(_E, V, NULL)) : NULL
 
 #define CSTR_RELEASE(V)     \
     if (_c##V) (*_E)->ReleaseStringUTFChars(_E, V, _c##V)
 
 #define WSTR_DECLARE(V)     \
     jsize _wl##V = V ? (*_E)->GetStringLength(_E, V) : 0;  \
-    const jchar *_ws##V = V ? (const jchar *)((*_E)->GetStringChars(_E, V, 0)) : NULL; \
+    const jchar *_ws##V = V ? (const jchar *)((*_E)->GetStringChars(_E, V, NULL)) : NULL; \
     wchar_t *_w##V = NULL
 
-#define WPTR_DECLARE(V)                                                 \
-        _w##V = (wchar_t *)malloc((_wl##V + 1) * sizeof(wchar_t));      \
-        if (_wl##V) wcsncpy(_w##V, (const wchar_t  *)_ws##V, _wl##V);   \
+#if CC_SIZEOF_WCHAR_T == 2
+/* wchat_t matches jchar */
+#define WPTR_DECLARE(V)                                                \
+        _w##V = (wchar_t *)malloc((_wl##V + 1) * sizeof(wchar_t));     \
+        if (_wl##V) memcpy(_w##V, _ws##V, _wl##V * sizeof(wchar_t));   \
         _w##V[_wl##V] = 0
 
+#elif CC_SIZEOF_WCHAR_T == 4
+/* Presume utf16 matches utf32.
+ * TODO: Figure out more optimised way of doing this.
+ */
+#define WPTR_DECLARE(V)                                                \
+        _w##V = (wchar_t *)malloc((_wl##V + 1) * sizeof(wchar_t));     \
+        if (_wl##V) {                                                  \
+            jsize _wi##V;                                              \
+            for (_wi##V = 0; _wi##V < _wl##V; _wi##V ++)               \
+                _w##V[_wi##V] = _ws##V[_wi##V];                        \
+        } _w##V[_wl##V] = 0
+
+#else
+#error "Unsupported wchat_t size"
+#endif
+
 #define WSTR_RELEASE(V)     \
     if (_ws##V) (*_E)->ReleaseStringChars(_E, V, _ws##V); \
     if (_w##V) free (_w##V)

Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_tables.h
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_tables.h?rev=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/include/acr_tables.h (original)
+++ commons/sandbox/runtime/trunk/src/main/native/include/acr_tables.h Fri Apr 17 07:39:29 2009
@@ -144,11 +144,12 @@
  * @param data Data
  * @param dlen Data length
  * @remark If key already exists in the table it's data will
- * be overwritten.
+ * be overwritten and original data will be returned.
+ * In case the key was not already present the function returns NULL.
  */
-ACR_DECLARE(void) ACR_TableSet(JNIEnv *_E, const char *file, int line,
-                               acr_table_t *t, const char *key,
-                               const void *data, acr_size_t dlen);
+ACR_DECLARE(void *) ACR_TableSet(JNIEnv *_E, const char *file, int line,
+                                 acr_table_t *t, const char *key,
+                                 const void *data, acr_size_t dlen);
 
 /**
  * Add the key/data pair to the table
@@ -188,6 +189,43 @@
 ACR_DECLARE(int) ACR_TableIndex(acr_table_t *t, int idx,
                                 void **data, acr_size_t *dlen);
 
+/**
+ * Prepares the table for traversal.
+ * @param t Table to use.
+ * @return ACR_EOF if no data is present in the table.
+ */
+ACR_DECLARE(int) ACR_TableFirst(acr_table_t *t);
+
+/**
+ * Get the next data from the table
+ * @param t Table to use.
+ * @param data Pointer where to store the data. Can be NULL
+ * @param dlen Pointer where to store the data length. Can be NULL
+ * @return ACR_EOF on end.
+ */
+ACR_DECLARE(int) ACR_TableNext(acr_table_t *t,
+                               void **data, acr_size_t *dlen);
+
+/**
+ * Test if there is next element in the table present.
+ * @param t Table to use.
+ * @return non zero if next element exists.
+ */
+ACR_DECLARE(int) ACR_TableHasNext(acr_table_t *t);
+
+/** Callback function used in ACR_TableForEach.
+ * If the function returns non zero the for each loop will break.
+ */
+typedef int (acr_table_callback_fn_t)(char *key, void *data, acr_size_t dlen);
+
+/**
+ * Execute callback for each table entry.
+ * @param t Table to use.
+ * @param callback Callback function
+ */
+ACR_DECLARE(void) ACR_TableForEach(acr_table_t *t,
+                                   acr_table_callback_fn_t *callback);
+
 #ifdef __cplusplus
 }
 #endif

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=765881&r1=765880&r2=765881&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 Fri Apr 17 07:39:29 2009
@@ -95,18 +95,6 @@
     /* XXX : BSD has more */
 } acr_procstate_e;
 
-typedef enum {
-    ACR_EX_EGENERAL = 0,    /* java/lang/Exception */
-    ACR_EX_ERUNTIME,        /* java/lang/RuntimeException */
-    ACR_EX_ENOMEM,          /* java/lang/OutOfMemoryError */
-    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;
-
 /**
  * @defgroup acr_ctype ctype functions
  * These macros allow correct support of 8-bit characters on systems which

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=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/error.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/error.c Fri Apr 17 07:39:29 2009
@@ -31,6 +31,7 @@
     "java/lang/IndexOutOfBoundsException",
     "java/lang/ClassCastException",
     "java/io/IOException",
+    "java/io/SyncFailedException",
     "java/net/SocketException",
     NULL
 };

Modified: 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=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/pointer.c Fri Apr 17 07:39:29 2009
@@ -100,42 +100,36 @@
     ACR_UnloadClass(_E, &_clazzn);
 }
 
-#if CC_SIZEOF_VOIDP == 8
 
 ACR_JNI_EXPORT_DECLARE(void, Pointer, cleanup0)(ACR_JNISTDARGS)
 {
     acr_pointer_callback_fn_t *cleanup;
+#if CC_SIZEOF_VOIDP == 8
     jlong h = GET_IFIELD_J(0000, _O);
     jlong c = GET_IFIELD_J(0001, _O);
 
     if (h) {
         SET_IFIELD_J(0000, _O, 0);
     }
-    cleanup = (acr_pointer_callback_fn_t *)((acr_ptr_t)c);
-    if (cleanup) {
-        (*cleanup)((void *)((acr_ptr_t)h));
-    }
-}
-
 #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);
+    jint h  = GET_IFIELD_I(0000, _O);
+    jint c  = GET_IFIELD_I(0001, _O);
 
     if (h) {
         SET_IFIELD_I(0000, _O, 0);
     }
+
+#endif
     cleanup = (acr_pointer_callback_fn_t *)((acr_ptr_t)c);
     if (cleanup) {
-        (*cleanup)((void *)((acr_ptr_t)h));
+        int rc = (*cleanup)((void *)((acr_ptr_t)h));
+        if (rc) {
+            /* Throw RuntimeException with errno message */
+            ACR_ThrowException(_E, THROW_FMARK, ACR_EX_ERUNTIME, rc);
+        }
     }
 }
 
-#endif
-
 ACR_DECLARE(jobject) ACR_CreatePointer(JNIEnv *_E, void *p,
                                        acr_pointer_callback_fn_t *cb)
 {

Modified: commons/sandbox/runtime/trunk/src/main/native/shared/tables.c
URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/tables.c?rev=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/tables.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/tables.c Fri Apr 17 07:39:29 2009
@@ -33,6 +33,8 @@
 };
 
 struct acr_table_t {
+    /* Index for first/next operations */
+    acr_size_t      i;
     /* Pointer to the array of table entries */
     acr_array_t     a;
     /* Table of hash buckets            */
@@ -153,17 +155,18 @@
     return tbl;
 }
 
-ACR_DECLARE(void) ACR_TableSet(JNIEnv *_E, const char *file, int line,
-                               acr_table_t *t, const char *key,
-                               const void *data, acr_size_t dlen)
+ACR_DECLARE(void *) ACR_TableSet(JNIEnv *_E, const char *file, int line,
+                                 acr_table_t *t, const char *key,
+                                 const void *data, acr_size_t dlen)
 {
     table_entry_t *e = NULL;
     unsigned int hash;
+    void *o = NULL;
 
     if (!key || !*key) {
         ACR_ThrowException(_E, file, line, ACR_EX_ENULL,
                            ACR_EISNULL);
-        return;     /* Skip empty and null strings */
+        return NULL; /* Skip empty and null strings */
     }
     hash = times33hash(key);
 
@@ -183,15 +186,19 @@
             /* The exception has already been thrown.
              * Just bail out.
              */
-            return;
+            return NULL;
         }
         e->key  = (char *)key;
         /* Insert new bucket into the list */
         e->next = t->hash[hash];
         t->hash[hash] = e;
     }
+    else
+        o = e->data;
     e->data = (void *)data;
     e->dlen = dlen;
+
+    return o;
 }
 
 ACR_DECLARE(void) ACR_TableAdd(JNIEnv *_E, const char *file, int line,
@@ -278,3 +285,51 @@
         *dlen = e[idx].dlen;
     return ACR_SUCCESS;
 }
+
+ACR_DECLARE(int) ACR_TableFirst(acr_table_t *t)
+{
+    if (!t->a.nelts) {
+        return ACR_EOF;
+    }
+    t->i = 0;
+    return ACR_SUCCESS;
+}
+
+ACR_DECLARE(int) ACR_TableNext(acr_table_t *t,
+                               void **data, acr_size_t *dlen)
+{
+    table_entry_t *e = NULL;
+
+    if (t->i >= t->a.nelts) {
+        return ACR_EOF;
+    }
+    e = (table_entry_t *)t->a.elts;
+    if (data)
+        *data = e[t->i].data;
+    if (dlen)
+        *dlen = e[t->i].dlen;
+    t->i++;
+    return ACR_SUCCESS;
+}
+
+ACR_DECLARE(int) ACR_TableHasNext(acr_table_t *t)
+{
+    if (t->i >= t->a.nelts)
+        return 0;
+    else
+        return 1;
+}
+
+ACR_DECLARE(void) ACR_TableForEach(acr_table_t *t,
+                                   acr_table_callback_fn_t *callback)
+{
+    
+    if (t && t->a.elts) {
+        acr_size_t i;
+        table_entry_t *e = (table_entry_t *)t->a.elts;
+        for (i = 0; i < t->a.nelts; i++) {
+            if ((*callback)(e[i].key, e[i].data, e[i].dlen))
+                break;
+        }
+    }
+}

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=765881&r1=765880&r2=765881&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/test/testcase.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/test/testcase.c Fri Apr 17 07:39:29 2009
@@ -125,9 +125,8 @@
         ACR_TableAdd(_E, THROW_FMARK, t, J2S(s), J2S(s), 2);
     }
     if (rc) {
-        int i;
-        for (i = 0;;i++) {
-            int r = ACR_TableIndex(t, i, &d, &l);
+        for (ACR_TableHasNext(t); ACR_TableHasNext(t);) {
+            int r = ACR_TableNext(t, &d, &l);
             if (r != ACR_SUCCESS)
                 break;
         }
@@ -211,10 +210,11 @@
     return 0;
 }
 
-static void callback(void *p)
+static int callback(void *p)
 {
     fprintf(stderr, "[native] Pointer callback called: %p\n", p);
     fflush(stderr);
+    return 0;
 }
 
 ACR_JNI_EXPORT_DECLARE(jobject, TestPrivate, test017)(ACR_JNISTDARGS, jint d)

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=765881&r1=765880&r2=765881&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 Fri Apr 17 07:39:29 2009
@@ -37,7 +37,8 @@
         return suite;
     }
 
-    private char longChar[] = new char[32768];
+    private static final int longStrSize = 1024 * 1024;
+    private char longChar[] = new char[longStrSize];
     private String longString;
     private static native void  test000(int err);
     private static native void  test001(String msg);
@@ -63,7 +64,7 @@
         throws Exception
     {
         System.loadLibrary("acr");
-        for (int i = 0; i < 32768; i++) {
+        for (int i = 0; i < longStrSize; i++) {
             longChar[i] = (char)('A' + (i % 20));
         }
         longString = new String(longChar);
@@ -233,7 +234,7 @@
     {
         Pointer p = test017(0xcafebabe);
         assertNotNull("Pointer",p);
-        p.testCleanup();
+        p.free();
         p = null;
         System.gc();
         // This should be enough for a gc
@@ -246,6 +247,8 @@
     {
         Pointer p = test017(0xdeadbeef);
         assertNotNull("Pointer", p);
+        String ph = Pointer.SIZEOF == 4 ? "0xdeadbeef" : "0x00000000deadbeef";
+        assertEquals("Pointer string ", ph, p.toString());
         p = null;
         System.gc();
         // This should be enough for a first invocation