< prev index next >
src/hotspot/share/classfile/javaClasses.cpp
Print this page
rev 58870 : 8242452: During module definition, move conversion of packages from native to VM
8242290: Pointless verification in get_package_entry_by_name
Reviewed-by: lfoltan, alanb, iklam
@@ -647,22 +647,50 @@
typeArrayOop value = java_lang_String::value(java_string);
return utf8_length(java_string, value);
}
char* java_lang_String::as_utf8_string(oop java_string) {
+ int length = 0;
+ return as_utf8_string(java_string, length);
+}
+
+char* java_lang_String::as_utf8_string(oop java_string, int& length) {
typeArrayOop value = java_lang_String::value(java_string);
- int length = java_lang_String::length(java_string, value);
+ length = java_lang_String::length(java_string, value);
bool is_latin1 = java_lang_String::is_latin1(java_string);
if (!is_latin1) {
jchar* position = (length == 0) ? NULL : value->char_at_addr(0);
return UNICODE::as_utf8(position, length);
} else {
jbyte* position = (length == 0) ? NULL : value->byte_at_addr(0);
return UNICODE::as_utf8(position, length);
}
}
+// Uses a provided buffer if it's sufficiently large, otherwise allocates
+// a resource array to fit
+char* java_lang_String::as_utf8_string_full(oop java_string, char* buf, int buflen, int& utf8_len) {
+ typeArrayOop value = java_lang_String::value(java_string);
+ int len = java_lang_String::length(java_string, value);
+ bool is_latin1 = java_lang_String::is_latin1(java_string);
+ if (!is_latin1) {
+ jchar *position = (len == 0) ? NULL : value->char_at_addr(0);
+ utf8_len = UNICODE::utf8_length(position, len);
+ if (utf8_len >= buflen) {
+ buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1);
+ }
+ return UNICODE::as_utf8(position, len, buf, utf8_len + 1);
+ } else {
+ jbyte *position = (len == 0) ? NULL : value->byte_at_addr(0);
+ utf8_len = UNICODE::utf8_length(position, len);
+ if (utf8_len >= buflen) {
+ buf = NEW_RESOURCE_ARRAY(char, utf8_len + 1);
+ }
+ return UNICODE::as_utf8(position, len, buf, utf8_len + 1);
+ }
+}
+
char* java_lang_String::as_utf8_string(oop java_string, typeArrayOop value, char* buf, int buflen) {
assert(value_equals(value, java_lang_String::value(java_string)),
"value must be same as java_lang_String::value(java_string)");
int length = java_lang_String::length(java_string, value);
bool is_latin1 = java_lang_String::is_latin1(java_string);
< prev index next >