equal
deleted
inserted
replaced
3192 typeArrayOop s_value = java_lang_String::value(s); |
3192 typeArrayOop s_value = java_lang_String::value(s); |
3193 bool is_latin1 = java_lang_String::is_latin1(s); |
3193 bool is_latin1 = java_lang_String::is_latin1(s); |
3194 if (isCopy != NULL) { |
3194 if (isCopy != NULL) { |
3195 *isCopy = is_latin1 ? JNI_TRUE : JNI_FALSE; |
3195 *isCopy = is_latin1 ? JNI_TRUE : JNI_FALSE; |
3196 } |
3196 } |
3197 const jchar* ret; |
3197 jchar* ret; |
3198 if (!is_latin1) { |
3198 if (!is_latin1) { |
3199 ret = s_value->char_at_addr(0); |
3199 ret = (jchar*) s_value->base(T_CHAR); |
3200 } else { |
3200 } else { |
3201 // Inflate latin1 encoded string to UTF16 |
3201 // Inflate latin1 encoded string to UTF16 |
3202 int s_len = java_lang_String::length(s); |
3202 int s_len = java_lang_String::length(s); |
3203 jchar* buf = NEW_C_HEAP_ARRAY(jchar, s_len, mtInternal); |
3203 ret = NEW_C_HEAP_ARRAY_RETURN_NULL(jchar, s_len + 1, mtInternal); // add one for zero termination |
3204 for (int i = 0; i < s_len; i++) { |
3204 /* JNI Specification states return NULL on OOM */ |
3205 buf[i] = ((jchar) s_value->byte_at(i)) & 0xff; |
3205 if (ret != NULL) { |
3206 } |
3206 for (int i = 0; i < s_len; i++) { |
3207 ret = &buf[0]; |
3207 ret[i] = ((jchar) s_value->byte_at(i)) & 0xff; |
|
3208 } |
|
3209 ret[s_len] = 0; |
|
3210 } |
3208 } |
3211 } |
3209 HOTSPOT_JNI_GETSTRINGCRITICAL_RETURN((uint16_t *) ret); |
3212 HOTSPOT_JNI_GETSTRINGCRITICAL_RETURN((uint16_t *) ret); |
3210 return ret; |
3213 return ret; |
3211 JNI_END |
3214 JNI_END |
3212 |
3215 |