@@ -655,6 +655,22 @@ static RunTimeSharedDictionary _unregistered_dictionary;
655655static RunTimeSharedDictionary _dynamic_builtin_dictionary;
656656static RunTimeSharedDictionary _dynamic_unregistered_dictionary;
657657
658+
659+ Handle SystemDictionaryShared::create_jar_manifest (const char * manifest_chars, size_t size, TRAPS) {
660+ typeArrayOop buf = oopFactory::new_byteArray ((int )size, CHECK_NH);
661+ typeArrayHandle bufhandle (THREAD, buf);
662+ ArrayAccess<>::arraycopy_from_native (reinterpret_cast <const jbyte*>(manifest_chars),
663+ buf, typeArrayOopDesc::element_offset<jbyte>(0 ), size);
664+ Handle bais = JavaCalls::construct_new_instance (SystemDictionary::ByteArrayInputStream_klass (),
665+ vmSymbols::byte_array_void_signature (),
666+ bufhandle, CHECK_NH);
667+ // manifest = new Manifest(ByteArrayInputStream)
668+ Handle manifest = JavaCalls::construct_new_instance (SystemDictionary::Jar_Manifest_klass (),
669+ vmSymbols::input_stream_void_signature (),
670+ bais, CHECK_NH);
671+ return manifest;
672+ }
673+
658674oop SystemDictionaryShared::shared_protection_domain (int index) {
659675 return ((objArrayOop)_shared_protection_domains.resolve ())->obj_at (index);
660676}
@@ -671,30 +687,17 @@ Handle SystemDictionaryShared::get_shared_jar_manifest(int shared_path_index, TR
671687 Handle manifest ;
672688 if (shared_jar_manifest (shared_path_index) == NULL ) {
673689 SharedClassPathEntry* ent = FileMapInfo::shared_path (shared_path_index);
674- long size = ent->manifest_size ();
675- if (size < = 0 ) {
690+ size_t size = ( size_t ) ent->manifest_size ();
691+ if (size = = 0 ) {
676692 return Handle ();
677693 }
678694
679695 // ByteArrayInputStream bais = new ByteArrayInputStream(buf);
680696 const char * src = ent->manifest ();
681697 assert (src != NULL , " No Manifest data" );
682- typeArrayOop buf = oopFactory::new_byteArray (size, CHECK_NH);
683- typeArrayHandle bufhandle (THREAD, buf);
684- ArrayAccess<>::arraycopy_from_native (reinterpret_cast <const jbyte*>(src),
685- buf, typeArrayOopDesc::element_offset<jbyte>(0 ), size);
686-
687- Handle bais = JavaCalls::construct_new_instance (SystemDictionary::ByteArrayInputStream_klass (),
688- vmSymbols::byte_array_void_signature (),
689- bufhandle, CHECK_NH);
690-
691- // manifest = new Manifest(bais)
692- manifest = JavaCalls::construct_new_instance (SystemDictionary::Jar_Manifest_klass (),
693- vmSymbols::input_stream_void_signature (),
694- bais, CHECK_NH);
698+ manifest = create_jar_manifest (src, size, THREAD);
695699 atomic_set_shared_jar_manifest (shared_path_index, manifest ());
696700 }
697-
698701 manifest = Handle (THREAD, shared_jar_manifest (shared_path_index));
699702 assert (manifest.not_null (), " sanity" );
700703 return manifest;
0 commit comments