src/hotspot/share/prims/jni.cpp
changeset 48819 ee513596f3ee
parent 48558 b2b67c8fc91a
parent 48808 2b0b7f222800
child 49036 bc92debe57e4
equal deleted inserted replaced
48818:ec4a84ba2aaf 48819:ee513596f3ee
  2812              jsize len, ElementType *buf)) \
  2812              jsize len, ElementType *buf)) \
  2813   JNIWrapper("Get" XSTR(Result) "ArrayRegion"); \
  2813   JNIWrapper("Get" XSTR(Result) "ArrayRegion"); \
  2814   EntryProbe; \
  2814   EntryProbe; \
  2815   DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \
  2815   DT_VOID_RETURN_MARK(Get##Result##ArrayRegion); \
  2816   typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  2816   typeArrayOop src = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  2817   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)src->length())) { \
  2817   if (start < 0 || len < 0 || (start > src->length() - len)) { \
  2818     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  2818     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  2819   } else { \
  2819   } else { \
  2820     if (len > 0) { \
  2820     if (len > 0) { \
  2821       int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \
  2821       int sc = TypeArrayKlass::cast(src->klass())->log2_element_size(); \
  2822       memcpy((u_char*) buf, \
  2822       memcpy((u_char*) buf, \
  2862              jsize len, const ElementType *buf)) \
  2862              jsize len, const ElementType *buf)) \
  2863   JNIWrapper("Set" XSTR(Result) "ArrayRegion"); \
  2863   JNIWrapper("Set" XSTR(Result) "ArrayRegion"); \
  2864   EntryProbe; \
  2864   EntryProbe; \
  2865   DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \
  2865   DT_VOID_RETURN_MARK(Set##Result##ArrayRegion); \
  2866   typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  2866   typeArrayOop dst = typeArrayOop(JNIHandles::resolve_non_null(array)); \
  2867   if (start < 0 || len < 0 || ((unsigned int)start + (unsigned int)len > (unsigned int)dst->length())) { \
  2867   if (start < 0 || len < 0 || (start > dst->length() - len)) { \
  2868     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  2868     THROW(vmSymbols::java_lang_ArrayIndexOutOfBoundsException()); \
  2869   } else { \
  2869   } else { \
  2870     if (len > 0) { \
  2870     if (len > 0) { \
  2871       int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \
  2871       int sc = TypeArrayKlass::cast(dst->klass())->log2_element_size(); \
  2872       memcpy((u_char*) dst->Tag##_at_addr(start), \
  2872       memcpy((u_char*) dst->Tag##_at_addr(start), \
  3098   JNIWrapper("GetStringRegion");
  3098   JNIWrapper("GetStringRegion");
  3099  HOTSPOT_JNI_GETSTRINGREGION_ENTRY(env, string, start, len, buf);
  3099  HOTSPOT_JNI_GETSTRINGREGION_ENTRY(env, string, start, len, buf);
  3100   DT_VOID_RETURN_MARK(GetStringRegion);
  3100   DT_VOID_RETURN_MARK(GetStringRegion);
  3101   oop s = JNIHandles::resolve_non_null(string);
  3101   oop s = JNIHandles::resolve_non_null(string);
  3102   int s_len = java_lang_String::length(s);
  3102   int s_len = java_lang_String::length(s);
  3103   if (start < 0 || len < 0 || start + len > s_len) {
  3103   if (start < 0 || len < 0 || start > s_len - len) {
  3104     THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
  3104     THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
  3105   } else {
  3105   } else {
  3106     if (len > 0) {
  3106     if (len > 0) {
  3107       typeArrayOop s_value = java_lang_String::value(s);
  3107       typeArrayOop s_value = java_lang_String::value(s);
  3108       bool is_latin1 = java_lang_String::is_latin1(s);
  3108       bool is_latin1 = java_lang_String::is_latin1(s);
  3124   JNIWrapper("GetStringUTFRegion");
  3124   JNIWrapper("GetStringUTFRegion");
  3125  HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY(env, string, start, len, buf);
  3125  HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY(env, string, start, len, buf);
  3126   DT_VOID_RETURN_MARK(GetStringUTFRegion);
  3126   DT_VOID_RETURN_MARK(GetStringUTFRegion);
  3127   oop s = JNIHandles::resolve_non_null(string);
  3127   oop s = JNIHandles::resolve_non_null(string);
  3128   int s_len = java_lang_String::length(s);
  3128   int s_len = java_lang_String::length(s);
  3129   if (start < 0 || len < 0 || start + len > s_len) {
  3129   if (start < 0 || len < 0 || start > s_len - len) {
  3130     THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
  3130     THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
  3131   } else {
  3131   } else {
  3132     //%note jni_7
  3132     //%note jni_7
  3133     if (len > 0) {
  3133     if (len > 0) {
  3134       // Assume the buffer is large enough as the JNI spec. does not require user error checking
  3134       // Assume the buffer is large enough as the JNI spec. does not require user error checking