You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@harmony.apache.org by ch...@apache.org on 2009/02/25 19:12:06 UTC
svn commit: r747879 -
/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
Author: chunrong
Date: Wed Feb 25 18:12:05 2009
New Revision: 747879
URL: http://svn.apache.org/viewvc?rev=747879&view=rev
Log:
Apply patch for HARMONY-6072, remove duplicated classpath entry from VM_BOOT_CLASS_PATH and include ClassPathFromJarFile
Modified:
harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
Modified: harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp
URL: http://svn.apache.org/viewvc/harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp?rev=747879&r1=747878&r2=747879&view=diff
==============================================================================
--- harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp (original)
+++ harmony/enhanced/drlvm/trunk/vm/vmcore/src/class_support/classloader.cpp Wed Feb 25 18:12:05 2009
@@ -1652,14 +1652,6 @@
}
}
- /*
- * set VM_BOOT_CLASS_PATH and SUN_BOOT_CLASS_PATH for any code
- * that needs it
- */
- m_env->VmProperties()->set(VM_BOOT_CLASS_PATH, vmboot);
- m_env->JavaProperties()->set(VM_BOOT_CLASS_PATH, vmboot);
- m_env->JavaProperties()->set(SUN_BOOT_CLASS_PATH, vmboot);
-
// create temp pool for apr functions
apr_pool_t *tmp_pool;
apr_pool_create(&tmp_pool, NULL);
@@ -1669,6 +1661,46 @@
SetClasspathFromString(vmboot, tmp_pool);
STD_FREE(vmboot);
+ // get a classpath from archive files manifests and
+ // set into boot class path collection
+ for( BCPElement* element = m_BCPElements.m_first;
+ element;
+ element = element->m_next )
+ {
+ TRACE2("classloader.bootclasspath", "BCP: " << element->m_path->bytes );
+ if( element->m_isJarFile ) {
+ SetClasspathFromJarFile( element->m_jar, tmp_pool );
+ }
+ }
+
+ // Here we have constructed boot class path without appended application class path
+ size_t vmboot_len = 0;
+ // Count new path length
+ for(BCPElement* element = m_BCPElements.m_first;
+ element;
+ element = element->m_next)
+ {
+ vmboot_len += element->m_path->len + 1; // 1 is for either PATH_SEPARATOR or \0
+ }
+ vmboot = (char*)STD_MALLOC(vmboot_len);
+ vmboot[0] = '\0';
+ for(BCPElement* element = m_BCPElements.m_first;
+ element;
+ element = element->m_next)
+ {
+ if(element != m_BCPElements.m_first) {
+ strcat(vmboot, PORT_PATH_SEPARATOR_STR);
+ }
+ strcat(vmboot, element->m_path->bytes);
+ }
+ /*
+ * set VM_BOOT_CLASS_PATH and SUN_BOOT_CLASS_PATH for any code
+ * that needs it
+ */
+ m_env->VmProperties()->set(VM_BOOT_CLASS_PATH, vmboot);
+ m_env->JavaProperties()->set(VM_BOOT_CLASS_PATH, vmboot);
+ m_env->JavaProperties()->set(SUN_BOOT_CLASS_PATH, vmboot);
+
// check if vm.bootclasspath.appendclasspath property is set to true
if( TRUE == vm_property_get_boolean("vm.bootclasspath.appendclasspath", FALSE, VM_PROPERTIES) ) {
// append classpath to bootclasspath