< prev index next >

src/hotspot/share/classfile/javaClasses.cpp

Print this page




 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) {


< prev index next >