summaryrefslogtreecommitdiffstats
path: root/vm/UtfString.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'vm/UtfString.cpp')
-rw-r--r--vm/UtfString.cpp102
1 files changed, 43 insertions, 59 deletions
diff --git a/vm/UtfString.cpp b/vm/UtfString.cpp
index 566650746..05bac533b 100644
--- a/vm/UtfString.cpp
+++ b/vm/UtfString.cpp
@@ -211,8 +211,8 @@ u4 dvmComputeStringHash(StringObject* strObj) {
}
int len = dvmGetFieldInt(strObj, STRING_FIELDOFF_COUNT);
int offset = dvmGetFieldInt(strObj, STRING_FIELDOFF_OFFSET);
- ArrayObject* chars = (ArrayObject*) dvmGetFieldObject(strObj,
- STRING_FIELDOFF_VALUE);
+ ArrayObject* chars =
+ (ArrayObject*) dvmGetFieldObject(strObj, STRING_FIELDOFF_VALUE);
hashCode = computeUtf16Hash((u2*)(void*)chars->contents + offset, len);
dvmSetFieldInt(strObj, STRING_FIELDOFF_HASHCODE, hashCode);
return hashCode;
@@ -281,29 +281,25 @@ StringObject* dvmCreateStringFromUnicode(const u2* unichars, int len)
*
* Returns NULL if the object is NULL.
*/
-char* dvmCreateCstrFromString(StringObject* jstr)
+char* dvmCreateCstrFromString(const StringObject* jstr)
{
- char* newStr;
- ArrayObject* chars;
- int len, byteLen, offset;
- const u2* data;
-
assert(gDvm.classJavaLangString != NULL);
-
- if (jstr == NULL)
+ if (jstr == NULL) {
return NULL;
+ }
- len = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_COUNT);
- offset = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_OFFSET);
- chars = (ArrayObject*) dvmGetFieldObject((Object*) jstr,
- STRING_FIELDOFF_VALUE);
- data = (const u2*)(void*)chars->contents + offset;
+ int len = dvmGetFieldInt(jstr, STRING_FIELDOFF_COUNT);
+ int offset = dvmGetFieldInt(jstr, STRING_FIELDOFF_OFFSET);
+ ArrayObject* chars =
+ (ArrayObject*) dvmGetFieldObject(jstr, STRING_FIELDOFF_VALUE);
+ const u2* data = (const u2*)(void*)chars->contents + offset;
assert(offset + len <= (int) chars->length);
- byteLen = utf16_utf8ByteLen(data, len);
- newStr = (char*) malloc(byteLen+1);
- if (newStr == NULL)
+ int byteLen = utf16_utf8ByteLen(data, len);
+ char* newStr = (char*) malloc(byteLen+1);
+ if (newStr == NULL) {
return NULL;
+ }
convertUtf16ToUtf8(newStr, data, len);
return newStr;
@@ -313,12 +309,10 @@ char* dvmCreateCstrFromString(StringObject* jstr)
* Create a UTF-8 C string from a region of a java/lang/String. (Used by
* the JNI GetStringUTFRegion call.)
*/
-void dvmCreateCstrFromStringRegion(StringObject* jstr, int start, int len,
- char* buf)
+void dvmCreateCstrFromStringRegion(const StringObject* jstr,
+ int start, int len, char* buf)
{
- const u2* data;
-
- data = dvmStringChars(jstr) + start;
+ const u2* data = dvmStringChars(jstr) + start;
convertUtf16ToUtf8(buf, data, len);
}
@@ -327,22 +321,18 @@ void dvmCreateCstrFromStringRegion(StringObject* jstr, int start, int len,
*
* Does not include the terminating null byte.
*/
-int dvmStringUtf8ByteLen(StringObject* jstr)
+int dvmStringUtf8ByteLen(const StringObject* jstr)
{
- ArrayObject* chars;
- int len, offset;
- const u2* data;
-
assert(gDvm.classJavaLangString != NULL);
-
- if (jstr == NULL)
+ if (jstr == NULL) {
return 0; // should we throw something? assert?
+ }
- len = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_COUNT);
- offset = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_OFFSET);
- chars = (ArrayObject*) dvmGetFieldObject((Object*) jstr,
- STRING_FIELDOFF_VALUE);
- data = (const u2*)(void*)chars->contents + offset;
+ int len = dvmGetFieldInt(jstr, STRING_FIELDOFF_COUNT);
+ int offset = dvmGetFieldInt(jstr, STRING_FIELDOFF_OFFSET);
+ ArrayObject* chars =
+ (ArrayObject*) dvmGetFieldObject(jstr, STRING_FIELDOFF_VALUE);
+ const u2* data = (const u2*)(void*)chars->contents + offset;
assert(offset + len <= (int) chars->length);
return utf16_utf8ByteLen(data, len);
@@ -351,31 +341,27 @@ int dvmStringUtf8ByteLen(StringObject* jstr)
/*
* Get the string's length.
*/
-int dvmStringLen(StringObject* jstr)
+int dvmStringLen(const StringObject* jstr)
{
- return dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_COUNT);
+ return dvmGetFieldInt(jstr, STRING_FIELDOFF_COUNT);
}
/*
* Get the char[] object from the String.
*/
-ArrayObject* dvmStringCharArray(StringObject* jstr)
+ArrayObject* dvmStringCharArray(const StringObject* jstr)
{
- return (ArrayObject*) dvmGetFieldObject((Object*) jstr,
- STRING_FIELDOFF_VALUE);
+ return (ArrayObject*) dvmGetFieldObject(jstr, STRING_FIELDOFF_VALUE);
}
/*
* Get the string's data.
*/
-const u2* dvmStringChars(StringObject* jstr)
+const u2* dvmStringChars(const StringObject* jstr)
{
- ArrayObject* chars;
- int offset;
-
- offset = dvmGetFieldInt((Object*) jstr, STRING_FIELDOFF_OFFSET);
- chars = (ArrayObject*) dvmGetFieldObject((Object*) jstr,
- STRING_FIELDOFF_VALUE);
+ int offset = dvmGetFieldInt(jstr, STRING_FIELDOFF_OFFSET);
+ ArrayObject* chars =
+ (ArrayObject*) dvmGetFieldObject(jstr, STRING_FIELDOFF_VALUE);
return (const u2*)(void*)chars->contents + offset;
}
@@ -391,24 +377,22 @@ int dvmHashcmpStrings(const void* vstrObj1, const void* vstrObj2)
{
const StringObject* strObj1 = (const StringObject*) vstrObj1;
const StringObject* strObj2 = (const StringObject*) vstrObj2;
- ArrayObject* chars1;
- ArrayObject* chars2;
- int len1, len2, offset1, offset2;
assert(gDvm.classJavaLangString != NULL);
/* get offset and length into char array; all values are in 16-bit units */
- len1 = dvmGetFieldInt((Object*) strObj1, STRING_FIELDOFF_COUNT);
- offset1 = dvmGetFieldInt((Object*) strObj1, STRING_FIELDOFF_OFFSET);
- len2 = dvmGetFieldInt((Object*) strObj2, STRING_FIELDOFF_COUNT);
- offset2 = dvmGetFieldInt((Object*) strObj2, STRING_FIELDOFF_OFFSET);
- if (len1 != len2)
+ int len1 = dvmGetFieldInt(strObj1, STRING_FIELDOFF_COUNT);
+ int offset1 = dvmGetFieldInt(strObj1, STRING_FIELDOFF_OFFSET);
+ int len2 = dvmGetFieldInt(strObj2, STRING_FIELDOFF_COUNT);
+ int offset2 = dvmGetFieldInt(strObj2, STRING_FIELDOFF_OFFSET);
+ if (len1 != len2) {
return len1 - len2;
+ }
- chars1 = (ArrayObject*) dvmGetFieldObject((Object*) strObj1,
- STRING_FIELDOFF_VALUE);
- chars2 = (ArrayObject*) dvmGetFieldObject((Object*) strObj2,
- STRING_FIELDOFF_VALUE);
+ ArrayObject* chars1 =
+ (ArrayObject*) dvmGetFieldObject(strObj1, STRING_FIELDOFF_VALUE);
+ ArrayObject* chars2 =
+ (ArrayObject*) dvmGetFieldObject(strObj2, STRING_FIELDOFF_VALUE);
/* damage here actually indicates a broken java/lang/String */
assert(offset1 + len1 <= (int) chars1->length);