src/share/vm/prims/jni.cpp

Print this page
rev 6283 : redundant memcpy


3133       typeArrayOop s_value = java_lang_String::value(s);
3134       memcpy(buf, s_value->char_at_addr(s_offset+start), sizeof(jchar)*len);
3135     }
3136   }
3137 JNI_END
3138 
3139 DT_VOID_RETURN_MARK_DECL(GetStringUTFRegion
3140                          , HOTSPOT_JNI_GETSTRINGUTFREGION_RETURN());
3141 
3142 JNI_ENTRY(void, jni_GetStringUTFRegion(JNIEnv *env, jstring string, jsize start, jsize len, char *buf))
3143   JNIWrapper("GetStringUTFRegion");
3144  HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY(env, string, start, len, buf);
3145   DT_VOID_RETURN_MARK(GetStringUTFRegion);
3146   oop s = JNIHandles::resolve_non_null(string);
3147   int s_len = java_lang_String::length(s);
3148   if (start < 0 || len < 0 || start + len > s_len) {
3149     THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
3150   } else {
3151     //%note jni_7
3152     if (len > 0) {
3153       ResourceMark rm(THREAD);
3154       char *utf_region = java_lang_String::as_utf8_string(s, start, len);
3155       int utf_len = (int)strlen(utf_region);
3156       memcpy(buf, utf_region, utf_len);
3157       buf[utf_len] = 0;
3158     } else {
3159       // JDK null-terminates the buffer even in len is zero
3160       if (buf != NULL) {
3161         buf[0] = 0;
3162       }
3163     }
3164   }
3165 JNI_END
3166 
3167 
3168 JNI_ENTRY(void*, jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboolean *isCopy))
3169   JNIWrapper("GetPrimitiveArrayCritical");
3170  HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_ENTRY(env, array, (uintptr_t *) isCopy);
3171   GC_locker::lock_critical(thread);
3172   if (isCopy != NULL) {
3173     *isCopy = JNI_FALSE;
3174   }
3175   oop a = JNIHandles::resolve_non_null(array);
3176   assert(a->is_array(), "just checking");
3177   BasicType type;


3863 #include "utilities/ostream.hpp"
3864 #if INCLUDE_VM_STRUCTS
3865 #include "runtime/vmStructs.hpp"
3866 #endif
3867 
3868 #define run_unit_test(unit_test_function_call)              \
3869   tty->print_cr("Running test: " #unit_test_function_call); \
3870   unit_test_function_call
3871 
3872 // Forward declaration
3873 void TestReservedSpace_test();
3874 void TestReserveMemorySpecial_test();
3875 void TestVirtualSpace_test();
3876 void TestMetaspaceAux_test();
3877 void TestMetachunk_test();
3878 void TestVirtualSpaceNode_test();
3879 void TestNewSize_test();
3880 void TestOldSize_test();
3881 void TestKlass_test();
3882 void TestBitMap_test();

3883 #if INCLUDE_ALL_GCS
3884 void TestOldFreeSpaceCalculation_test();
3885 void TestG1BiasedArray_test();
3886 void TestBufferingOopClosure_test();
3887 void TestCodeCacheRemSet_test();
3888 #endif
3889 
3890 void execute_internal_vm_tests() {
3891   if (ExecuteInternalVMTests) {
3892     tty->print_cr("Running internal VM tests");
3893     run_unit_test(TestReservedSpace_test());
3894     run_unit_test(TestReserveMemorySpecial_test());
3895     run_unit_test(TestVirtualSpace_test());
3896     run_unit_test(TestMetaspaceAux_test());
3897     run_unit_test(TestMetachunk_test());
3898     run_unit_test(TestVirtualSpaceNode_test());
3899     run_unit_test(GlobalDefinitions::test_globals());
3900     run_unit_test(GCTimerAllTest::all());
3901     run_unit_test(arrayOopDesc::test_max_array_length());
3902     run_unit_test(CollectedHeap::test_is_in());
3903     run_unit_test(QuickSort::test_quick_sort());
3904     run_unit_test(AltHashing::test_alt_hash());
3905     run_unit_test(test_loggc_filename());
3906     run_unit_test(TestNewSize_test());
3907     run_unit_test(TestOldSize_test());
3908     run_unit_test(TestKlass_test());
3909     run_unit_test(TestBitMap_test());

3910 #if INCLUDE_VM_STRUCTS
3911     run_unit_test(VMStructs::test());
3912 #endif
3913 #if INCLUDE_ALL_GCS
3914     run_unit_test(TestOldFreeSpaceCalculation_test());
3915     run_unit_test(TestG1BiasedArray_test());
3916     run_unit_test(HeapRegionRemSet::test_prt());
3917     run_unit_test(TestBufferingOopClosure_test());
3918     run_unit_test(TestCodeCacheRemSet_test());
3919 #endif
3920     tty->print_cr("All internal VM tests passed");
3921   }
3922 }
3923 
3924 #undef run_unit_test
3925 
3926 #endif
3927 
3928 DT_RETURN_MARK_DECL(CreateJavaVM, jint
3929                     , HOTSPOT_JNI_CREATEJAVAVM_RETURN(_ret_ref));




3133       typeArrayOop s_value = java_lang_String::value(s);
3134       memcpy(buf, s_value->char_at_addr(s_offset+start), sizeof(jchar)*len);
3135     }
3136   }
3137 JNI_END
3138 
3139 DT_VOID_RETURN_MARK_DECL(GetStringUTFRegion
3140                          , HOTSPOT_JNI_GETSTRINGUTFREGION_RETURN());
3141 
3142 JNI_ENTRY(void, jni_GetStringUTFRegion(JNIEnv *env, jstring string, jsize start, jsize len, char *buf))
3143   JNIWrapper("GetStringUTFRegion");
3144  HOTSPOT_JNI_GETSTRINGUTFREGION_ENTRY(env, string, start, len, buf);
3145   DT_VOID_RETURN_MARK(GetStringUTFRegion);
3146   oop s = JNIHandles::resolve_non_null(string);
3147   int s_len = java_lang_String::length(s);
3148   if (start < 0 || len < 0 || start + len > s_len) {
3149     THROW(vmSymbols::java_lang_StringIndexOutOfBoundsException());
3150   } else {
3151     //%note jni_7
3152     if (len > 0) {
3153       // Assume the buffer is large enough as the JNI spec. does not require user error checking
3154       java_lang_String::as_utf8_string(s, start, len, buf, INT_MAX);
3155       // as_utf8_string null-terminates the result string


3156     } else {
3157       // JDK null-terminates the buffer even in len is zero
3158       if (buf != NULL) {
3159         buf[0] = 0;
3160       }
3161     }
3162   }
3163 JNI_END
3164 
3165 
3166 JNI_ENTRY(void*, jni_GetPrimitiveArrayCritical(JNIEnv *env, jarray array, jboolean *isCopy))
3167   JNIWrapper("GetPrimitiveArrayCritical");
3168  HOTSPOT_JNI_GETPRIMITIVEARRAYCRITICAL_ENTRY(env, array, (uintptr_t *) isCopy);
3169   GC_locker::lock_critical(thread);
3170   if (isCopy != NULL) {
3171     *isCopy = JNI_FALSE;
3172   }
3173   oop a = JNIHandles::resolve_non_null(array);
3174   assert(a->is_array(), "just checking");
3175   BasicType type;


3861 #include "utilities/ostream.hpp"
3862 #if INCLUDE_VM_STRUCTS
3863 #include "runtime/vmStructs.hpp"
3864 #endif
3865 
3866 #define run_unit_test(unit_test_function_call)              \
3867   tty->print_cr("Running test: " #unit_test_function_call); \
3868   unit_test_function_call
3869 
3870 // Forward declaration
3871 void TestReservedSpace_test();
3872 void TestReserveMemorySpecial_test();
3873 void TestVirtualSpace_test();
3874 void TestMetaspaceAux_test();
3875 void TestMetachunk_test();
3876 void TestVirtualSpaceNode_test();
3877 void TestNewSize_test();
3878 void TestOldSize_test();
3879 void TestKlass_test();
3880 void TestBitMap_test();
3881 void TestAsUtf8();
3882 #if INCLUDE_ALL_GCS
3883 void TestOldFreeSpaceCalculation_test();
3884 void TestG1BiasedArray_test();
3885 void TestBufferingOopClosure_test();
3886 void TestCodeCacheRemSet_test();
3887 #endif
3888 
3889 void execute_internal_vm_tests() {
3890   if (ExecuteInternalVMTests) {
3891     tty->print_cr("Running internal VM tests");
3892     run_unit_test(TestReservedSpace_test());
3893     run_unit_test(TestReserveMemorySpecial_test());
3894     run_unit_test(TestVirtualSpace_test());
3895     run_unit_test(TestMetaspaceAux_test());
3896     run_unit_test(TestMetachunk_test());
3897     run_unit_test(TestVirtualSpaceNode_test());
3898     run_unit_test(GlobalDefinitions::test_globals());
3899     run_unit_test(GCTimerAllTest::all());
3900     run_unit_test(arrayOopDesc::test_max_array_length());
3901     run_unit_test(CollectedHeap::test_is_in());
3902     run_unit_test(QuickSort::test_quick_sort());
3903     run_unit_test(AltHashing::test_alt_hash());
3904     run_unit_test(test_loggc_filename());
3905     run_unit_test(TestNewSize_test());
3906     run_unit_test(TestOldSize_test());
3907     run_unit_test(TestKlass_test());
3908     run_unit_test(TestBitMap_test());
3909     run_unit_test(TestAsUtf8());
3910 #if INCLUDE_VM_STRUCTS
3911     run_unit_test(VMStructs::test());
3912 #endif
3913 #if INCLUDE_ALL_GCS
3914     run_unit_test(TestOldFreeSpaceCalculation_test());
3915     run_unit_test(TestG1BiasedArray_test());
3916     run_unit_test(HeapRegionRemSet::test_prt());
3917     run_unit_test(TestBufferingOopClosure_test());
3918     run_unit_test(TestCodeCacheRemSet_test());
3919 #endif
3920     tty->print_cr("All internal VM tests passed");
3921   }
3922 }
3923 
3924 #undef run_unit_test
3925 
3926 #endif
3927 
3928 DT_RETURN_MARK_DECL(CreateJavaVM, jint
3929                     , HOTSPOT_JNI_CREATEJAVAVM_RETURN(_ret_ref));