src/hotspot/share/classfile/classLoader.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File open Cdiff src/hotspot/share/classfile/classLoader.cpp

src/hotspot/share/classfile/classLoader.cpp

Print this page

        

*** 260,274 **** } ClassFileStream* ClassPathDirEntry::open_stream(const char* name, TRAPS) { // construct full path name ! char* path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); ! if (jio_snprintf(path, JVM_MAXPATHLEN, "%s%s%s", _dir, os::file_separator(), name) == -1) { ! FREE_RESOURCE_ARRAY(char, path, JVM_MAXPATHLEN); ! return NULL; ! } // check if file exists struct stat st; if (os::stat(path, &st) == 0) { #if INCLUDE_CDS if (DumpSharedSpaces) { --- 260,274 ---- } ClassFileStream* ClassPathDirEntry::open_stream(const char* name, TRAPS) { // construct full path name ! assert((_dir != NULL) && (name != NULL), "sanity"); ! size_t path_len = strlen(_dir) + strlen(name) + strlen(os::file_separator()) + 1; ! char* path = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, path_len); ! int len = jio_snprintf(path, path_len, "%s%s%s", _dir, os::file_separator(), name); ! assert(len == (int)(path_len - 1), "sanity"); // check if file exists struct stat st; if (os::stat(path, &st) == 0) { #if INCLUDE_CDS if (DumpSharedSpaces) {
*** 289,308 **** // construct ClassFileStream if (num_read == (size_t)st.st_size) { if (UsePerfData) { ClassLoader::perf_sys_classfile_bytes_read()->inc(num_read); } ! FREE_RESOURCE_ARRAY(char, path, JVM_MAXPATHLEN); // Resource allocated return new ClassFileStream(buffer, st.st_size, _dir, ClassFileStream::verify); } } } ! FREE_RESOURCE_ARRAY(char, path, JVM_MAXPATHLEN); return NULL; } ClassPathZipEntry::ClassPathZipEntry(jzfile* zip, const char* zip_name, bool is_boot_append) : ClassPathEntry() { _zip = zip; --- 289,308 ---- // construct ClassFileStream if (num_read == (size_t)st.st_size) { if (UsePerfData) { ClassLoader::perf_sys_classfile_bytes_read()->inc(num_read); } ! FREE_RESOURCE_ARRAY(char, path, path_len); // Resource allocated return new ClassFileStream(buffer, st.st_size, _dir, ClassFileStream::verify); } } } ! FREE_RESOURCE_ARRAY(char, path, path_len); return NULL; } ClassPathZipEntry::ClassPathZipEntry(jzfile* zip, const char* zip_name, bool is_boot_append) : ClassPathEntry() { _zip = zip;
*** 379,408 **** } } if (is_multi_ver) { int n; ! char* entry_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, JVM_MAXPATHLEN); if (version > 0) { ! n = jio_snprintf(entry_name, JVM_MAXPATHLEN, "META-INF/versions/%d/%s", version, name); entry_name[n] = '\0'; buffer = open_entry((const char*)entry_name, filesize, false, CHECK_NULL); if (buffer == NULL) { warning("Could not find %s in %s, try to find highest version instead", entry_name, _zip_name); } } if (buffer == NULL) { for (int i = cur_ver; i >= base_version; i--) { ! n = jio_snprintf(entry_name, JVM_MAXPATHLEN, "META-INF/versions/%d/%s", i, name); entry_name[n] = '\0'; buffer = open_entry((const char*)entry_name, filesize, false, CHECK_NULL); if (buffer != NULL) { break; } } } ! FREE_RESOURCE_ARRAY(char, entry_name, JVM_MAXPATHLEN); } } return buffer; } --- 379,412 ---- } } if (is_multi_ver) { int n; ! const char* version_entry = "META-INF/versions/"; ! // 10 is the max length of a decimal 32-bit non-negative number ! // 2 includes the '/' and trailing zero ! size_t entry_name_len = strlen(version_entry) + 10 + strlen(name) + 2; ! char* entry_name = NEW_RESOURCE_ARRAY_IN_THREAD(THREAD, char, entry_name_len); if (version > 0) { ! n = jio_snprintf(entry_name, entry_name_len, "%s%d/%s", version_entry, version, name); entry_name[n] = '\0'; buffer = open_entry((const char*)entry_name, filesize, false, CHECK_NULL); if (buffer == NULL) { warning("Could not find %s in %s, try to find highest version instead", entry_name, _zip_name); } } if (buffer == NULL) { for (int i = cur_ver; i >= base_version; i--) { ! n = jio_snprintf(entry_name, entry_name_len, "%s%d/%s", version_entry, i, name); entry_name[n] = '\0'; buffer = open_entry((const char*)entry_name, filesize, false, CHECK_NULL); if (buffer != NULL) { break; } } } ! FREE_RESOURCE_ARRAY(char, entry_name, entry_name_len); } } return buffer; }
src/hotspot/share/classfile/classLoader.cpp
Index Unified diffs Context diffs Sdiffs Wdiffs Patch New Old Previous File Next File