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/07/04 10:20:57 UTC
svn commit: r791081 - in /commons/sandbox/runtime/trunk/src/main:
java/org/apache/commons/runtime/Memory.java native/shared/memory.c
Author: mturk
Date: Sat Jul 4 08:20:57 2009
New Revision: 791081
URL: http://svn.apache.org/viewvc?rev=791081&view=rev
Log:
Throw exception when writing to ConstPointer
Modified:
commons/sandbox/runtime/trunk/src/main/java/org/apache/commons/runtime/Memory.java
commons/sandbox/runtime/trunk/src/main/native/shared/memory.c
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=791081&r1=791080&r2=791081&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 Sat Jul 4 08:20:57 2009
@@ -185,6 +185,8 @@
private static native Pointer slice0(Pointer src, long offset, long size)
throws IndexOutOfBoundsException;
+ private static native Pointer slice1(Pointer src, long offset, long size)
+ throws IndexOutOfBoundsException;
/**
* Creates a new {@link Pointer} object whose content is a shared
* subsequence of a {@code src} memory address.
@@ -213,8 +215,10 @@
{
if (offset < 0L || size < 1L)
throw new IllegalArgumentException();
-
- return slice0(src, offset, size);
+ if (src instanceof ConstPointer)
+ return slice1(src, offset, size);
+ else
+ return slice0(src, offset, size);
}
private static native Pointer dup0(Pointer src, long offset, long size)
@@ -273,16 +277,21 @@
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
* @throws RuntimeException if memory is corrupted.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(Pointer src, long srcPos, Pointer dst,
long dstPos, long length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException, RuntimeException
+ NullPointerException, RuntimeException,
+ UnsupportedOperationException
{
if (srcPos < 0L || dstPos < 0L)
throw new IllegalArgumentException();
if (length < 1L)
throw new IllegalArgumentException();
+ if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
copy0(src, srcPos, dst, dstPos, length);
}
@@ -312,16 +321,21 @@
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
* @throws RuntimeException if memory is corrupted.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void move(Pointer src, long srcPos, Pointer dst,
long dstPos, long length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException, RuntimeException
+ NullPointerException, RuntimeException,
+ UnsupportedOperationException
{
if (srcPos < 0L || dstPos < 0L)
throw new IllegalArgumentException();
if (length < 1L)
throw new IllegalArgumentException();
+ if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
move0(src, srcPos, dst, dstPos, length);
}
@@ -342,13 +356,18 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code ptr} is {@code null}.
* @throws RuntimeException if memory is corrupted.
+ * @throws UnsupportedOperationException if {@code ptr} is
+ * instance of {@code ConstPointer}.
*/
public static void clear(Pointer ptr, long offset, long length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException, RuntimeException
+ NullPointerException, RuntimeException,
+ UnsupportedOperationException
{
if (offset < 0L || length < 1L)
throw new IllegalArgumentException();
+ if (ptr instanceof ConstPointer)
+ throw new UnsupportedOperationException();
clear0(ptr, offset, length);
}
@@ -370,13 +389,18 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code ptr} is {@code null}.
* @throws RuntimeException if memory is corrupted.
+ * @throws UnsupportedOperationException if {@code ptr} is
+ * instance of {@code ConstPointer}.
*/
public static void set(Pointer ptr, long offset, long length, int val)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException, RuntimeException
+ NullPointerException, RuntimeException,
+ UnsupportedOperationException
{
if (offset < 0L || length < 1L)
throw new IllegalArgumentException();
+ if (ptr instanceof ConstPointer)
+ throw new UnsupportedOperationException();
set0(ptr, offset, length, val);
}
@@ -831,16 +855,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(byte[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy0(src, srcPos, dst, dstPos, length);
}
@@ -864,16 +892,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(char[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy1(src, srcPos, dst, dstPos, length);
}
@@ -897,16 +929,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(short[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy2(src, srcPos, dst, dstPos, length);
}
@@ -930,16 +966,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(int[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy3(src, srcPos, dst, dstPos, length);
}
@@ -963,16 +1003,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(long[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy4(src, srcPos, dst, dstPos, length);
}
@@ -996,16 +1040,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(float[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy5(src, srcPos, dst, dstPos, length);
}
@@ -1029,16 +1077,20 @@
* access of data outside allocated memory bounds.
* @throws NullPointerException if {@code src} or {@code dst} is
* {@code null}.
+ * @throws UnsupportedOperationException if {@code dst} is
+ * instance of {@code ConstPointer}.
*/
public static void copy(double[] src, int srcPos, Pointer dst,
long dstPos, int length)
throws IndexOutOfBoundsException, IllegalArgumentException,
- NullPointerException
+ NullPointerException, UnsupportedOperationException
{
if (srcPos < 0 || dstPos < 0L || length == 0)
throw new IllegalArgumentException();
else if ((dstPos + length) > src.length)
throw new IndexOutOfBoundsException();
+ else if (dst instanceof ConstPointer)
+ throw new UnsupportedOperationException();
pcpy6(src, srcPos, dst, dstPos, length);
}
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=791081&r1=791080&r2=791081&view=diff
==============================================================================
--- commons/sandbox/runtime/trunk/src/main/native/shared/memory.c (original)
+++ commons/sandbox/runtime/trunk/src/main/native/shared/memory.c Sat Jul 4 08:20:57 2009
@@ -349,6 +349,31 @@
return ACR_NewPointer(_E, sp + so, ss, NULL);
}
+ACR_JNI_EXPORT_DECLARE(jobject, Memory, slice1)(ACR_JNISTDARGS,
+ jobject src, jlong off,
+ jlong siz)
+{
+ size_t so = (size_t)off;
+ size_t ss = (size_t)siz;
+ size_t sl;
+ char *sp = (char *)ACR_PointerGet(_E, src, &sl);
+
+ UNREFERENCED_O;
+
+ if (!sp) {
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_ENULL, 0);
+ return NULL;
+ }
+ if ((so + ss) > sl) {
+ ACR_ThrowException(_E, THROW_NMARK, ACR_EX_EINDEX, 0);
+ return NULL;
+ }
+
+ /* Create the ConstPointer class.
+ */
+ return ACR_NewConstPointer(_E, sp + so, ss);
+}
+
ACR_JNI_EXPORT_DECLARE(jobject, Memory, dup0)(ACR_JNISTDARGS,
jobject src, jlong off,
jlong siz)