Mercurial > hg > graal-jvmci-8
comparison src/share/vm/classfile/javaClasses.cpp @ 22:90f5ddc7297b
6646946: Kernel installation failed on Japanese and Chinese XP SP2 (VM part)
Summary: convert strings from Download Manager into native encoding in the VM
Reviewed-by: sbohne, never, phh, kamg, xlu
author | coleenp |
---|---|
date | Thu, 17 Jan 2008 13:38:17 -0800 |
parents | a61af66fc99e |
children | deb97b8ef02b |
comparison
equal
deleted
inserted
replaced
21:b611e572fc5b | 22:90f5ddc7297b |
---|---|
141 } | 141 } |
142 | 142 |
143 jstring js = NULL; | 143 jstring js = NULL; |
144 { JavaThread* thread = (JavaThread*)THREAD; | 144 { JavaThread* thread = (JavaThread*)THREAD; |
145 assert(thread->is_Java_thread(), "must be java thread"); | 145 assert(thread->is_Java_thread(), "must be java thread"); |
146 HandleMark hm(thread); | |
146 ThreadToNativeFromVM ttn(thread); | 147 ThreadToNativeFromVM ttn(thread); |
148 js = (_to_java_string_fn)(thread->jni_environment(), str); | |
149 } | |
150 return Handle(THREAD, JNIHandles::resolve(js)); | |
151 } | |
152 | |
153 // Converts a Java String to a native C string that can be used for | |
154 // native OS calls. | |
155 char* java_lang_String::as_platform_dependent_str(Handle java_string, TRAPS) { | |
156 | |
157 typedef char* (*to_platform_string_fn_t)(JNIEnv*, jstring, bool*); | |
158 static to_platform_string_fn_t _to_platform_string_fn = NULL; | |
159 | |
160 if (_to_platform_string_fn == NULL) { | |
161 void *lib_handle = os::native_java_library(); | |
162 _to_platform_string_fn = CAST_TO_FN_PTR(to_platform_string_fn_t, hpi::dll_lookup(lib_handle, "GetStringPlatformChars")); | |
163 if (_to_platform_string_fn == NULL) { | |
164 fatal("GetStringPlatformChars missing"); | |
165 } | |
166 } | |
167 | |
168 char *native_platform_string; | |
169 { JavaThread* thread = (JavaThread*)THREAD; | |
170 assert(thread->is_Java_thread(), "must be java thread"); | |
171 JNIEnv *env = thread->jni_environment(); | |
172 jstring js = (jstring) JNIHandles::make_local(env, java_string()); | |
173 bool is_copy; | |
147 HandleMark hm(thread); | 174 HandleMark hm(thread); |
148 js = (_to_java_string_fn)(thread->jni_environment(), str); | 175 ThreadToNativeFromVM ttn(thread); |
149 } | 176 native_platform_string = (_to_platform_string_fn)(env, js, &is_copy); |
150 return Handle(THREAD, JNIHandles::resolve(js)); | 177 assert(is_copy == JNI_TRUE, "is_copy value changed"); |
178 JNIHandles::destroy_local(js); | |
179 } | |
180 return native_platform_string; | |
151 } | 181 } |
152 | 182 |
153 Handle java_lang_String::char_converter(Handle java_string, jchar from_char, jchar to_char, TRAPS) { | 183 Handle java_lang_String::char_converter(Handle java_string, jchar from_char, jchar to_char, TRAPS) { |
154 oop obj = java_string(); | 184 oop obj = java_string(); |
155 // Typical usage is to convert all '/' to '.' in string. | 185 // Typical usage is to convert all '/' to '.' in string. |