src/share/vm/prims/jni.cpp

changeset 8962
8aa5e0006ee3
parent 8470
20dbd8a8e6b7
child 8981
1ba859a58587
equal deleted inserted replaced
8961:b0b6bdcf22f0 8962:8aa5e0006ee3
3830 jsize len, ElementType *buf)) \ 3830 jsize len, ElementType *buf)) \
3831 JNIWrapper("Get" XSTR(Result) "ArrayRegion"); \ 3831 JNIWrapper("Get" XSTR(Result) "ArrayRegion"); \
3832 EntryProbe; \ 3832 EntryProbe; \
3833 DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \ 3833 DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \
3834 typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \ 3834 typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
3835 if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \ 3835 if (start < 0 || len < 0 || (start > src->length() - len)) { \
3836 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ 3836 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
3837 } else { \ 3837 } else { \
3838 if (len > 0) { \ 3838 if (len > 0) { \
3839 int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \ 3839 int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \
3840 memcpy((u_char*) buf, \ 3840 memcpy((u_char*) buf, \
3914 jsize len, const ElementType *buf)) \ 3914 jsize len, const ElementType *buf)) \
3915 JNIWrapper("Set" XSTR(Result) "ArrayRegion"); \ 3915 JNIWrapper("Set" XSTR(Result) "ArrayRegion"); \
3916 EntryProbe; \ 3916 EntryProbe; \
3917 DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \ 3917 DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \
3918 typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \ 3918 typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
3919 if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \ 3919 if (start < 0 || len < 0 || (start > dst->length() - len)) { \
3920 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \ 3920 THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
3921 } else { \ 3921 } else { \
3922 if (len > 0) { \ 3922 if (len > 0) { \
3923 int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \ 3923 int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \
3924 memcpy((u_char*) dst->Tag##_at_addr(start), \ 3924 memcpy((u_char*) dst->Tag##_at_addr(start), \
4198 env, string, start, len, buf); 4198 env, string, start, len, buf);
4199 #endif /* USDT2 */ 4199 #endif /* USDT2 */
4200 DT_VOID_RETURN_MARK(GetStringRegion); 4200 DT_VOID_RETURN_MARK(GetStringRegion);
4201 oop s = JNIHandles::resolve_non_null(string); 4201 oop s = JNIHandles::resolve_non_null(string);
4202 int s_len = java_lang_String::length(s); 4202 int s_len = java_lang_String::length(s);
4203 if (start < 0 || len < 0 || start + len > s_len) { 4203 if (start < 0 || len < 0 || start > s_len - len) {
4204 THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException()); 4204 THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
4205 } else { 4205 } else {
4206 if (len > 0) { 4206 if (len > 0) {
4207 int s_offset = java_lang_String::offset(s); 4207 int s_offset = java_lang_String::offset(s);
4208 typeArrayOop s_value = java_lang_String::value(s); 4208 typeArrayOop s_value = java_lang_String::value(s);
4227 env, string, start, len, buf); 4227 env, string, start, len, buf);
4228 #endif /* USDT2 */ 4228 #endif /* USDT2 */
4229 DT_VOID_RETURN_MARK(GetStringUTFRegion); 4229 DT_VOID_RETURN_MARK(GetStringUTFRegion);
4230 oop s = JNIHandles::resolve_non_null(string); 4230 oop s = JNIHandles::resolve_non_null(string);
4231 int s_len = java_lang_String::length(s); 4231 int s_len = java_lang_String::length(s);
4232 if (start < 0 || len < 0 || start + len > s_len) { 4232 if (start < 0 || len < 0 || start > s_len - len) {
4233 THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException()); 4233 THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
4234 } else { 4234 } else {
4235 //%note jni_7 4235 //%note jni_7
4236 if (len > 0) { 4236 if (len > 0) {
4237 ResourceMark rm(THREAD); 4237 ResourceMark rm(THREAD);

mercurial