370 371 #ifdef ASSERT 372 { 373 ResourceMark rm; 374 const char* expected = symbol->as_utf8(); 375 char* actual = as_utf8_string(h_obj()); 376 if (strncmp(expected, actual, utf8_len) != 0) { 377 tty->print_cr("Symbol conversion failure: %s --> %s", expected, actual); 378 ShouldNotReachHere(); 379 } 380 } 381 #endif 382 383 return h_obj; 384 } 385 386 // Converts a C string to a Java String based on current encoding 387 Handle java_lang_String::create_from_platform_dependent_str(const char* str, TRAPS) { 388 assert(str != NULL, "bad arguments"); 389 390 typedef jstring (*to_java_string_fn_t)(JNIEnv*, const char *); 391 static to_java_string_fn_t _to_java_string_fn = NULL; 392 393 if (_to_java_string_fn == NULL) { 394 void *lib_handle = os::native_java_library(); 395 _to_java_string_fn = CAST_TO_FN_PTR(to_java_string_fn_t, os::dll_lookup(lib_handle, "NewStringPlatform")); 396 if (_to_java_string_fn == NULL) { 397 fatal("NewStringPlatform missing"); 398 } 399 } 400 401 jstring js = NULL; 402 { 403 assert(THREAD->is_Java_thread(), "must be java thread"); 404 JavaThread* thread = (JavaThread*)THREAD; 405 HandleMark hm(thread); 406 ThreadToNativeFromVM ttn(thread); 407 js = (_to_java_string_fn)(thread->jni_environment(), str); 408 } 409 410 Handle native_platform_string(THREAD, JNIHandles::resolve(js)); 411 JNIHandles::destroy_local(js); // destroy local JNIHandle. 412 return native_platform_string; 413 } 414 415 // Converts a Java String to a native C string that can be used for 416 // native OS calls. 417 char* java_lang_String::as_platform_dependent_str(Handle java_string, TRAPS) { | 370 371 #ifdef ASSERT 372 { 373 ResourceMark rm; 374 const char* expected = symbol->as_utf8(); 375 char* actual = as_utf8_string(h_obj()); 376 if (strncmp(expected, actual, utf8_len) != 0) { 377 tty->print_cr("Symbol conversion failure: %s --> %s", expected, actual); 378 ShouldNotReachHere(); 379 } 380 } 381 #endif 382 383 return h_obj; 384 } 385 386 // Converts a C string to a Java String based on current encoding 387 Handle java_lang_String::create_from_platform_dependent_str(const char* str, TRAPS) { 388 assert(str != NULL, "bad arguments"); 389 390 typedef jstring (JNICALL *to_java_string_fn_t)(JNIEnv*, const char *); 391 static to_java_string_fn_t _to_java_string_fn = NULL; 392 393 if (_to_java_string_fn == NULL) { 394 void *lib_handle = os::native_java_library(); 395 _to_java_string_fn = CAST_TO_FN_PTR(to_java_string_fn_t, os::dll_lookup(lib_handle, "JNU_NewStringPlatform")); 396 #if defined(_WIN32) && !defined(_WIN64) 397 if (_to_java_string_fn == NULL) { 398 // On 32 bit Windows, also try __stdcall decorated name 399 _to_java_string_fn = CAST_TO_FN_PTR(to_java_string_fn_t, os::dll_lookup(lib_handle, "_JNU_NewStringPlatform@8")); 400 } 401 #endif 402 if (_to_java_string_fn == NULL) { 403 fatal("JNU_NewStringPlatform missing"); 404 } 405 } 406 407 jstring js = NULL; 408 { 409 assert(THREAD->is_Java_thread(), "must be java thread"); 410 JavaThread* thread = (JavaThread*)THREAD; 411 HandleMark hm(thread); 412 ThreadToNativeFromVM ttn(thread); 413 js = (_to_java_string_fn)(thread->jni_environment(), str); 414 } 415 416 Handle native_platform_string(THREAD, JNIHandles::resolve(js)); 417 JNIHandles::destroy_local(js); // destroy local JNIHandle. 418 return native_platform_string; 419 } 420 421 // Converts a Java String to a native C string that can be used for 422 // native OS calls. 423 char* java_lang_String::as_platform_dependent_str(Handle java_string, TRAPS) { |