Signed-off-by: Tomek Grabiec <[email protected]>
---
vm/jni-interface.c | 50 ++++++++++++++++++++++++++++++++++++++++++--------
1 files changed, 42 insertions(+), 8 deletions(-)
diff --git a/vm/jni-interface.c b/vm/jni-interface.c
index a55292c..fb184f1 100644
--- a/vm/jni-interface.c
+++ b/vm/jni-interface.c
@@ -912,6 +912,40 @@ DECLARE_GET_XXX_ARRAY_REGION(long);
DECLARE_GET_XXX_ARRAY_REGION(short);
DECLARE_GET_XXX_ARRAY_REGION(boolean);
+#define DECLARE_SET_XXX_ARRAY_REGION(type) \
+static void \
+ vm_jni_set_ ## type ## _array_region(struct vm_jni_env *env, \
+ jobject array, \
+ jsize start, \
+ jsize len, \
+ j ## type *buf) \
+{ \
+ enter_vm_from_jni(); \
+ \
+ if (!vm_class_is_array_class(array->class) || \
+ vm_class_get_array_element_class(array->class) \
+ != vm_ ## type ## _class) \
+ return; \
+ \
+ if (start < 0 || len < 0 || start + len > array->array_length) { \
+
signal_new_exception(vm_java_lang_ArrayIndexOutOfBoundsException, \
+ NULL); \
+ return; \
+ } \
+ \
+ for (long i = 0; i < len; i++) \
+ array_set_field_##type(array, start + i, buf[i]); \
+}
+
+DECLARE_SET_XXX_ARRAY_REGION(byte);
+DECLARE_SET_XXX_ARRAY_REGION(char);
+DECLARE_SET_XXX_ARRAY_REGION(double);
+DECLARE_SET_XXX_ARRAY_REGION(float);
+DECLARE_SET_XXX_ARRAY_REGION(int);
+DECLARE_SET_XXX_ARRAY_REGION(long);
+DECLARE_SET_XXX_ARRAY_REGION(short);
+DECLARE_SET_XXX_ARRAY_REGION(boolean);
+
/*
* The JNI native interface table.
* See: http://java.sun.com/j2se/1.4.2/docs/guide/jni/spec/functions.html
@@ -1207,16 +1241,16 @@ void *vm_jni_native_interface[] = {
/* 205 */
vm_jni_get_float_array_region,
vm_jni_get_double_array_region,
- NULL, /* SetBooleanArrayRegion */
- NULL, /* SetByteArrayRegion */
- NULL, /* SetCharArrayRegion */
+ vm_jni_set_boolean_array_region,
+ vm_jni_set_byte_array_region,
+ vm_jni_set_char_array_region,
/* 210 */
- NULL, /* SetShortArrayRegion */
- NULL, /* SetIntArrayRegion */
- NULL, /* SetLongArrayRegion */
- NULL, /* SetFloatArrayRegion */
- NULL, /* SetDoubleArrayRegion */
+ vm_jni_set_short_array_region,
+ vm_jni_set_int_array_region,
+ vm_jni_set_long_array_region,
+ vm_jni_set_float_array_region,
+ vm_jni_set_double_array_region,
/* 215 */
NULL, /* RegisterNatives */
--
1.6.0.6
------------------------------------------------------------------------------
Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day
trial. Simplify your report design, integration and deployment - and focus on
what you do best, core application coding. Discover what's new with
Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________
Jatovm-devel mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/jatovm-devel