equal
deleted
inserted
replaced
2464 buf = NEW_C_HEAP_ARRAY_RETURN_NULL(jchar, s_len + 1, mtInternal); // add one for zero termination |
2464 buf = NEW_C_HEAP_ARRAY_RETURN_NULL(jchar, s_len + 1, mtInternal); // add one for zero termination |
2465 /* JNI Specification states return NULL on OOM */ |
2465 /* JNI Specification states return NULL on OOM */ |
2466 if (buf != NULL) { |
2466 if (buf != NULL) { |
2467 if (s_len > 0) { |
2467 if (s_len > 0) { |
2468 if (!is_latin1) { |
2468 if (!is_latin1) { |
2469 memcpy(buf, s_value->char_at_addr(0), sizeof(jchar)*s_len); |
2469 ArrayAccess<>::arraycopy_to_native(s_value, (size_t) typeArrayOopDesc::element_offset<jchar>(0), |
|
2470 buf, s_len); |
2470 } else { |
2471 } else { |
2471 for (int i = 0; i < s_len; i++) { |
2472 for (int i = 0; i < s_len; i++) { |
2472 buf[i] = ((jchar) s_value->byte_at(i)) & 0xff; |
2473 buf[i] = ((jchar) s_value->byte_at(i)) & 0xff; |
2473 } |
2474 } |
2474 } |
2475 } |
2720 } else { \ |
2721 } else { \ |
2721 /* JNI Specification states return NULL on OOM */ \ |
2722 /* JNI Specification states return NULL on OOM */ \ |
2722 result = NEW_C_HEAP_ARRAY_RETURN_NULL(ElementType, len, mtInternal); \ |
2723 result = NEW_C_HEAP_ARRAY_RETURN_NULL(ElementType, len, mtInternal); \ |
2723 if (result != NULL) { \ |
2724 if (result != NULL) { \ |
2724 /* copy the array to the c chunk */ \ |
2725 /* copy the array to the c chunk */ \ |
2725 memcpy(result, a->Tag##_at_addr(0), sizeof(ElementType)*len); \ |
2726 ArrayAccess<>::arraycopy_to_native(a, typeArrayOopDesc::element_offset<ElementType>(0), \ |
|
2727 result, len); \ |
2726 if (isCopy) { \ |
2728 if (isCopy) { \ |
2727 *isCopy = JNI_TRUE; \ |
2729 *isCopy = JNI_TRUE; \ |
2728 } \ |
2730 } \ |
2729 } \ |
2731 } \ |
2730 } \ |
2732 } \ |
2769 EntryProbe; \ |
2771 EntryProbe; \ |
2770 typeArrayOop a = typeArrayOop(JNIHandles::resolve_non_null(array)); \ |
2772 typeArrayOop a = typeArrayOop(JNIHandles::resolve_non_null(array)); \ |
2771 int len = a->length(); \ |
2773 int len = a->length(); \ |
2772 if (len != 0) { /* Empty array: nothing to free or copy. */ \ |
2774 if (len != 0) { /* Empty array: nothing to free or copy. */ \ |
2773 if ((mode == 0) || (mode == JNI_COMMIT)) { \ |
2775 if ((mode == 0) || (mode == JNI_COMMIT)) { \ |
2774 memcpy(a->Tag##_at_addr(0), buf, sizeof(ElementType)*len); \ |
2776 ArrayAccess<>::arraycopy_from_native(buf, a, typeArrayOopDesc::element_offset<ElementType>(0), len); \ |
2775 } \ |
2777 } \ |
2776 if ((mode == 0) || (mode == JNI_ABORT)) { \ |
2778 if ((mode == 0) || (mode == JNI_ABORT)) { \ |
2777 FreeHeap(buf); \ |
2779 FreeHeap(buf); \ |
2778 } \ |
2780 } \ |
2779 } \ |
2781 } \ |
2820 typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \ |
2822 typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \ |
2821 if (start < 0 || len < 0 || (start > src->length() - len)) { \ |
2823 if (start < 0 || len < 0 || (start > src->length() - len)) { \ |
2822 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ |
2824 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ |
2823 } else { \ |
2825 } else { \ |
2824 if (len > 0) { \ |
2826 if (len > 0) { \ |
2825 int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \ |
2827 ArrayAccess<>::arraycopy_to_native(src, typeArrayOopDesc::element_offset<ElementType>(start), buf, len); \ |
2826 memcpy((u_char*) buf, \ |
|
2827 (u_char*) src->Tag##_at_addr(start), \ |
|
2828 len << sc); \ |
|
2829 } \ |
2828 } \ |
2830 } \ |
2829 } \ |
2831 JNI_END |
2830 JNI_END |
2832 |
2831 |
2833 DEFINE_GETSCALARARRAYREGION(T_BOOLEAN, jboolean,Boolean, bool |
2832 DEFINE_GETSCALARARRAYREGION(T_BOOLEAN, jboolean,Boolean, bool |
2870 typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \ |
2869 typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \ |
2871 if (start < 0 || len < 0 || (start > dst->length() - len)) { \ |
2870 if (start < 0 || len < 0 || (start > dst->length() - len)) { \ |
2872 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ |
2871 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ |
2873 } else { \ |
2872 } else { \ |
2874 if (len > 0) { \ |
2873 if (len > 0) { \ |
2875 int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \ |
2874 ArrayAccess<>::arraycopy_from_native(buf, dst, typeArrayOopDesc::element_offset<ElementType>(start), len); \ |
2876 memcpy((u_char*) dst->Tag##_at_addr(start), \ |
|
2877 (u_char*) buf, \ |
|
2878 len << sc); \ |
|
2879 } \ |
2875 } \ |
2880 } \ |
2876 } \ |
2881 JNI_END |
2877 JNI_END |
2882 |
2878 |
2883 DEFINE_SETSCALARARRAYREGION(T_BOOLEAN, jboolean, Boolean, bool |
2879 DEFINE_SETSCALARARRAYREGION(T_BOOLEAN, jboolean, Boolean, bool |
3109 } else { |
3105 } else { |
3110 if (len > 0) { |
3106 if (len > 0) { |
3111 typeArrayOop s_value = java_lang_String::value(s); |
3107 typeArrayOop s_value = java_lang_String::value(s); |
3112 bool is_latin1 = java_lang_String::is_latin1(s); |
3108 bool is_latin1 = java_lang_String::is_latin1(s); |
3113 if (!is_latin1) { |
3109 if (!is_latin1) { |
3114 memcpy(buf, s_value->char_at_addr(start), sizeof(jchar)*len); |
3110 ArrayAccess<>::arraycopy_to_native(s_value, typeArrayOopDesc::element_offset<jchar>(start), |
|
3111 buf, len); |
3115 } else { |
3112 } else { |
3116 for (int i = 0; i < len; i++) { |
3113 for (int i = 0; i < len; i++) { |
3117 buf[i] = ((jchar) s_value->byte_at(i + start)) & 0xff; |
3114 buf[i] = ((jchar) s_value->byte_at(i + start)) & 0xff; |
3118 } |
3115 } |
3119 } |
3116 } |