Author: mturk Date: Fri Apr 24 08:38:33 2009 New Revision: 768221 URL: http://svn.apache.org/viewvc?rev=768221&view=rev Log: Add Memory.realloc
Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Pointer.java commons/sandbox/runtime/trunk/src/main/native/include/acr_memory.h commons/sandbox/runtime/trunk/src/main/native/shared/memory.c commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java?rev=768221&r1=768220&r2=768221&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Descriptor.java Fri Apr 24 08:38:33 2009 @@ -58,7 +58,7 @@ * Represents a C/C++ NULL {...@code descriptor}. */ public static final Descriptor NULL; - static { + static { NULL = nulld0(); } Modified: commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java?rev=768221&r1=768220&r2=768221&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java (original) +++ commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java Fri Apr 24 08:38:33 2009 @@ -59,6 +59,18 @@ throws OutOfMemoryError, IllegalArgumentException; /** + * Change the size of memory block pointed by {...@code ptr}. + * + * @param prt Pointer which size to change.. + * @param size The new size of the memory block. + * + * @throws OutOfMemoryError if memory cannot be allocated. + * @throws IllegalArgumentException if the size is less then {...@code 1}. + */ + public static native void realloc(Pointer ptr, long size) + throws OutOfMemoryError, IllegalArgumentException; + + /** * Creates a new {...@link Pointer} object whose content is a shared * subsequence of a {...@code src} memory address. * 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=768221&r1=768220&r2=768221&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 24 08:38:33 2009 @@ -45,7 +45,7 @@ * Represents a C/C++ NULL {...@code pointer}. */ public static final Pointer NULL; - static { + static { NULL = nullp0(); } Modified: commons/sandbox/runtime/trunk/src/main/native/include/acr_memory.h URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/include/acr_memory.h?rev=768221&r1=768220&r2=768221&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/include/acr_memory.h (original) +++ commons/sandbox/runtime/trunk/src/main/native/include/acr_memory.h Fri Apr 24 08:38:33 2009 @@ -60,6 +60,19 @@ acr_size_t size); /** + * Apache's "replacement" for the realloc() function that throws + * thejava.lang.OutOfMemoryError in case of failure. + * @param env Current JNI environment. + * @param org Memory block to reallocate. + * @param size New allocation size + * @param file Source file where the function was called + * @param line Source file line where the function was called + * @return Pointer to reallocated memory. + */ +ACR_DECLARE(void *) ACR_Realloc(JNIEnv *_E, const char *file, int line, + void *org, acr_size_t size); + +/** * Apache's "replacement" for the free() function that throws * the java.lang.NullPointerException in case of memory is NULL. * @param env Current JNI environment. Modified: commons/sandbox/runtime/trunk/src/main/native/shared/memory.c URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/main/native/shared/memory.c?rev=768221&r1=768220&r2=768221&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/main/native/shared/memory.c (original) +++ commons/sandbox/runtime/trunk/src/main/native/shared/memory.c Fri Apr 24 08:38:33 2009 @@ -61,6 +61,21 @@ return mem; } +ACR_DECLARE(void *) ACR_Realloc(JNIEnv *_E, const char *file, int line, + void *org, acr_size_t size) +{ + void *mem = realloc(org, size); + + if (!mem) { + if (_E == NULL) + _E = ACR_GetJNIEnv(); + if (_E != NULL) + ACR_ThrowException(_E, file, line, ACR_EX_ENOMEM, + ACR_GET_OS_ERROR()); + } + return mem; +} + ACR_DECLARE(void) ACR_Free(JNIEnv *_E, const char *file, int line, void *mem) { @@ -272,6 +287,27 @@ return ptr; } +ACR_JNI_EXPORT_DECLARE(void, Memory, realloc)(ACR_JNISTDARGS, + jobject src, + jlong siz) +{ + void *np; + size_t ss = (size_t)siz; + void *op = ACR_PointerGet(_E, src, NULL); + + UNREFERENCED_O; + + if (siz < 1L) { + ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINVAL, 0); + return; + } + np = ACR_Realloc(_E, THROW_NMARK, op, ss); + if (!np) { + return; + } + ACR_PointerSet(_E, src, np, ss); +} + ACR_JNI_EXPORT_DECLARE(jobject, Memory, slice)(ACR_JNISTDARGS, jobject src, jlong off, jlong siz) Modified: commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java URL: http://svn.apache.org/viewvc/commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java?rev=768221&r1=768220&r2=768221&view=diff ============================================================================== --- commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java (original) +++ commons/sandbox/runtime/trunk/src/test/org/apache/commons/runtime/TestMemory.java Fri Apr 24 08:38:33 2009 @@ -66,6 +66,17 @@ p.free(); } + public void testRealloc() + throws Throwable + { + Pointer p = Memory.calloc(1000); + p.poke(999, 23); + Memory.realloc(p, 9999); + assertNotNull("Pointer", p); + assertEquals("Value", 23, p.peek(999)); + p.free(); + } + public void testSlice() throws Throwable { @@ -177,8 +188,6 @@ public void testNull() throws Throwable { -// Pointer p = Pointer.NULL; -// assertNotNull("Pointer", p); assertTrue("Not null", Pointer.NULL.IsNull()); }