< prev index next >

src/hotspot/share/classfile/systemDictionaryShared.cpp

Print this page
rev 49674 : 8198285: More consistent Access API for arraycopy


  89 
  90 
  91 Handle SystemDictionaryShared::get_shared_jar_manifest(int shared_path_index, TRAPS) {
  92   Handle empty;
  93   Handle manifest ;
  94   if (shared_jar_manifest(shared_path_index) == NULL) {
  95     SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)FileMapInfo::shared_path(shared_path_index);
  96     long size = ent->manifest_size();
  97     if (size <= 0) {
  98       return empty; // No manifest - return NULL handle
  99     }
 100 
 101     // ByteArrayInputStream bais = new ByteArrayInputStream(buf);
 102     InstanceKlass* bais_klass = SystemDictionary::ByteArrayInputStream_klass();
 103     Handle bais = bais_klass->allocate_instance_handle(CHECK_(empty));
 104     {
 105       const char* src = ent->manifest();
 106       assert(src != NULL, "No Manifest data");
 107       typeArrayOop buf = oopFactory::new_byteArray(size, CHECK_(empty));
 108       typeArrayHandle bufhandle(THREAD, buf);
 109       char* dst = (char*)(buf->byte_at_addr(0));
 110       memcpy(dst, src, (size_t)size);
 111 
 112       JavaValue result(T_VOID);
 113       JavaCalls::call_special(&result, bais, bais_klass,
 114                               vmSymbols::object_initializer_name(),
 115                               vmSymbols::byte_array_void_signature(),
 116                               bufhandle, CHECK_(empty));
 117     }
 118 
 119     // manifest = new Manifest(bais)
 120     InstanceKlass* manifest_klass = SystemDictionary::Jar_Manifest_klass();
 121     manifest = manifest_klass->allocate_instance_handle(CHECK_(empty));
 122     {
 123       JavaValue result(T_VOID);
 124       JavaCalls::call_special(&result, manifest, manifest_klass,
 125                               vmSymbols::object_initializer_name(),
 126                               vmSymbols::input_stream_void_signature(),
 127                               bais, CHECK_(empty));
 128     }
 129     atomic_set_shared_jar_manifest(shared_path_index, manifest());
 130   }




  89 
  90 
  91 Handle SystemDictionaryShared::get_shared_jar_manifest(int shared_path_index, TRAPS) {
  92   Handle empty;
  93   Handle manifest ;
  94   if (shared_jar_manifest(shared_path_index) == NULL) {
  95     SharedClassPathEntryExt* ent = (SharedClassPathEntryExt*)FileMapInfo::shared_path(shared_path_index);
  96     long size = ent->manifest_size();
  97     if (size <= 0) {
  98       return empty; // No manifest - return NULL handle
  99     }
 100 
 101     // ByteArrayInputStream bais = new ByteArrayInputStream(buf);
 102     InstanceKlass* bais_klass = SystemDictionary::ByteArrayInputStream_klass();
 103     Handle bais = bais_klass->allocate_instance_handle(CHECK_(empty));
 104     {
 105       const char* src = ent->manifest();
 106       assert(src != NULL, "No Manifest data");
 107       typeArrayOop buf = oopFactory::new_byteArray(size, CHECK_(empty));
 108       typeArrayHandle bufhandle(THREAD, buf);
 109       HeapAccess<>::arraycopy<jbyte>(NULL, 0, reinterpret_cast<const jbyte*>(src),
 110                                      buf, typeArrayOopDesc::element_offset<jbyte>(0), NULL, size);
 111 
 112       JavaValue result(T_VOID);
 113       JavaCalls::call_special(&result, bais, bais_klass,
 114                               vmSymbols::object_initializer_name(),
 115                               vmSymbols::byte_array_void_signature(),
 116                               bufhandle, CHECK_(empty));
 117     }
 118 
 119     // manifest = new Manifest(bais)
 120     InstanceKlass* manifest_klass = SystemDictionary::Jar_Manifest_klass();
 121     manifest = manifest_klass->allocate_instance_handle(CHECK_(empty));
 122     {
 123       JavaValue result(T_VOID);
 124       JavaCalls::call_special(&result, manifest, manifest_klass,
 125                               vmSymbols::object_initializer_name(),
 126                               vmSymbols::input_stream_void_signature(),
 127                               bais, CHECK_(empty));
 128     }
 129     atomic_set_shared_jar_manifest(shared_path_index, manifest());
 130   }


< prev index next >