diff options
Diffstat (limited to 'libjava/prims.cc')
-rw-r--r-- | libjava/prims.cc | 23 |
1 files changed, 15 insertions, 8 deletions
diff --git a/libjava/prims.cc b/libjava/prims.cc index 0346b02371b..7f3276e77d8 100644 --- a/libjava/prims.cc +++ b/libjava/prims.cc @@ -255,8 +255,8 @@ _Jv_strLengthUtf8(char* str, int len) /* Calculate a hash value for a string encoded in Utf8 format. * This returns the same hash value as specified or java.lang.String.hashCode. */ -static jint -hashUtf8String (char* str, int len) +jint +_Jv_hashUtf8String (char* str, int len) { unsigned char* ptr = (unsigned char*) str; unsigned char* limit = ptr + len; @@ -272,17 +272,24 @@ hashUtf8String (char* str, int len) return hash; } +void +_Jv_Utf8Const::init(char *s, int len) +{ + ::memcpy (data, s, len); + data[len] = 0; + length = len; + hash = _Jv_hashUtf8String (s, len) & 0xFFFF; +} + _Jv_Utf8Const * _Jv_makeUtf8Const (char* s, int len) { if (len < 0) len = strlen (s); - Utf8Const* m = (Utf8Const*) _Jv_AllocBytes (sizeof(Utf8Const) + len + 1); - memcpy (m->data, s, len); - m->data[len] = 0; - m->length = len; - m->hash = hashUtf8String (s, len) & 0xFFFF; - return (m); + Utf8Const* m + = (Utf8Const*) _Jv_AllocBytes (_Jv_Utf8Const::space_needed(s, len)); + m->init(s, len); + return m; } _Jv_Utf8Const * |