diff options
Diffstat (limited to 'runtime/class_linker.cc')
-rw-r--r-- | runtime/class_linker.cc | 23 |
1 files changed, 11 insertions, 12 deletions
diff --git a/runtime/class_linker.cc b/runtime/class_linker.cc index e31fe6315b..c964dbcf59 100644 --- a/runtime/class_linker.cc +++ b/runtime/class_linker.cc @@ -1037,20 +1037,13 @@ bool ClassLinker::InitFromBootImage(std::string* error_msg) { runtime->SetSentinel(heap->AllocNonMovableObject<true>( self, java_lang_Object, java_lang_Object->GetObjectSize(), VoidFunctor())); - const std::vector<std::string>& boot_class_path = runtime->GetBootClassPath(); - if (boot_class_path.size() != spaces.size()) { - *error_msg = StringPrintf("Boot class path has %zu components but there are %zu image spaces.", - boot_class_path.size(), - spaces.size()); - return false; - } - for (size_t i = 0u, size = spaces.size(); i != size; ++i) { + for (gc::space::ImageSpace* image_space : spaces) { // Boot class loader, use a null handle. std::vector<std::unique_ptr<const DexFile>> dex_files; - if (!AddImageSpace(spaces[i], + if (!AddImageSpace(image_space, ScopedNullHandle<mirror::ClassLoader>(), - /*dex_elements=*/ nullptr, - /*dex_location=*/ boot_class_path[i].c_str(), + /*dex_elements=*/nullptr, + /*dex_location=*/nullptr, /*out*/&dex_files, error_msg)) { return false; @@ -1988,7 +1981,13 @@ bool ClassLinker::AddImageSpace( std::string dex_file_location(dex_cache->GetLocation()->ToModifiedUtf8()); // TODO: Only store qualified paths. // If non qualified, qualify it. - dex_file_location = OatFile::ResolveRelativeEncodedDexLocation(dex_location, dex_file_location); + if (dex_file_location.find('/') == std::string::npos) { + std::string dex_location_path = dex_location; + const size_t pos = dex_location_path.find_last_of('/'); + CHECK_NE(pos, std::string::npos); + dex_location_path = dex_location_path.substr(0, pos + 1); // Keep trailing '/' + dex_file_location = dex_location_path + dex_file_location; + } std::unique_ptr<const DexFile> dex_file = OpenOatDexFile(oat_file, dex_file_location.c_str(), error_msg); |