From fda7f2273ea91a684f4e2d55df365c7ed2332b10 Mon Sep 17 00:00:00 2001 From: twisti Date: Wed, 22 Aug 2007 18:24:23 +0000 Subject: [PATCH] * src/vm/properties.c (list_properties_entry): Renamed to list_properties_entry_t. (properties_init): Only initialize the list. (properties_set): New function to set default properties (don't use JAVA_HOME to set java.home). * src/vm/properties.h (vm/types.h): Removed. (stdint.h): Added. (properties_init): Changed signature. (properties_set): New function. * src/vm/vm.c (cacao_prefix): Removed. (cacao_libjvm): Likewise. (classpath_libdir): Likewise. (_Jv_bootclasspath): Likewise. (_Jv_classpath): Likewise. (_Jv_java_library_path): Likewise. (specificmethodname): Likewise. (specificsignature): Likewise. (startit): Likewise. (vm_printconfig): Use properties_get to get properties. (vm_create): Moved properties stuff into properties_set. * src/vm/vm.h (cacao_prefix): Removed. (cacao_libjvm): Likewise. (classpath_libdir): Likewise. (_Jv_bootclasspath): Likewise. (_Jv_classpath): Likewise. (_Jv_java_library_path): Likewise. * src/vmcore/suck.c (suck_add_from_property): Use properties_get to manipulate bootclasspath. --- src/vm/properties.c | 347 +++++++++++++++++++++++++++++++---------- src/vm/properties.h | 8 +- src/vm/vm.c | 373 +++++++++----------------------------------- src/vm/vm.h | 10 +- src/vmcore/suck.c | 46 +++--- 5 files changed, 365 insertions(+), 419 deletions(-) diff --git a/src/vm/properties.c b/src/vm/properties.c index e1c8cbc7c..54641c3fe 100644 --- a/src/vm/properties.c +++ b/src/vm/properties.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: properties.c 8389 2007-08-21 18:26:33Z twisti $ + $Id: properties.c 8399 2007-08-22 18:24:23Z twisti $ */ @@ -59,9 +59,9 @@ /* internal property structure ************************************************/ -typedef struct list_properties_entry list_properties_entry; +typedef struct list_properties_entry_t list_properties_entry_t; -struct list_properties_entry { +struct list_properties_entry_t { char *key; char *value; listnode_t linkage; @@ -80,12 +80,28 @@ static list_t *list_properties = NULL; *******************************************************************************/ -bool properties_init(void) +void properties_init(void) +{ + list_properties = list_create(OFFSET(list_properties_entry_t, linkage)); +} + + +/* properties_set ************************************************************** + + Fill the properties list with default values. + +*******************************************************************************/ + +void properties_set(void) { #if defined(ENABLE_JAVASE) - char *env_java_home; + int len; + char *p; + char *java_home; - s4 len; + char *boot_library_path; + char *boot_class_path; + char *class_path; # if defined(WITH_CLASSPATH_GNU) char *cwd; @@ -96,23 +112,237 @@ bool properties_init(void) char *lang; char *country; struct utsname *utsnamebuf; + + char *java_library_path; # endif #endif - /* create the properties list */ +#if defined(WITH_JRE_LAYOUT) + /* SUN also uses a buffer of 4096-bytes (strace is your friend). */ - list_properties = list_create(OFFSET(list_properties_entry, linkage)); + p = MNEW(char, 4096); -#if defined(ENABLE_JAVASE) + if (readlink("/proc/self/exe", p, 4095) == -1) + vm_abort("properties_set: readlink failed: %s\n", strerror(errno)); - /* get properties from system */ + /* Get the path of the current executable. */ + + p = dirname(p); + +# if defined(WITH_CLASSPATH_GNU) + + /* Set java.home. */ + + len = strlen(path) + strlen("/..") + strlen("0"); + + java_home = MNEW(char, len); + + strcpy(java_home, p); + strcat(java_home, "/.."); + + /* Set the path to Java core native libraries. */ + + len = strlen(cacao_prefix) + strlen("/lib/classpath") + strlen("0"); + + boot_library_path = MNEW(char, len); + + strcpy(boot_library_path, java_home); + strcat(boot_library_path, "/lib/classpath"); + +# elif defined(WITH_CLASSPATH_SUN) + + /* Find correct java.home. We check if there is a JRE + co-located. */ + + /* NOTE: We use the server VM here as it should be available on + all architectures. */ + + len = + strlen(p) + + strlen("/../jre/lib/"JAVA_ARCH"/server/libjvm.so") + + strlen("0"); + + java_home = MNEW(char, len); + + strcpy(java_home, p); + strcat(java_home, "/../jre/lib/"JAVA_ARCH"/server/libjvm.so"); + + /* Check if that libjvm.so exists. */ + + if (access(java_home, F_OK) == 0) { + /* Yes, we add /jre to java.home. */ + + strcpy(java_home, p); + strcat(java_home, "/../jre"); + } + else { + /* No, java.home is parent directory. */ + + strcpy(java_home, p); + strcat(java_home, "/.."); + } + +# else +# error unknown classpath configuration +# endif + + /* Free path. */ + + MFREE(p, char, len); + +#else + java_home = CACAO_PREFIX; + +# if defined(WITH_CLASSPATH_GNU) + boot_library_path = CLASSPATH_LIBDIR"/classpath"; +# else + boot_library_path = CLASSPATH_LIBDIR; +# endif +#endif + + properties_add("java.home", java_home); + + /* Set the bootclasspath. */ + + p = getenv("BOOTCLASSPATH"); + + if (p != NULL) { + boot_class_path = MNEW(char, strlen(p) + strlen("0")); + strcpy(boot_class_path, p); + } + else { +#if defined(WITH_JRE_LAYOUT) +# if defined(WITH_CLASSPATH_GNU) + + len = + strlen(java_home) + strlen("/share/cacao/vm.zip:") + + strlen(java_home) + strlen("/share/classpath/glibj.zip") + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcpy(boot_class_path, java_home); + strcat(boot_class_path, "/share/cacao/vm.zip"); + strcat(boot_class_path, ":"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/share/classpath/glibj.zip"); + +# elif defined(WITH_CLASSPATH_SUN) - env_java_home = getenv("JAVA_HOME"); + /* This is the bootclasspath taken from HotSpot (see + hotspot/src/share/vm/runtime/os.cpp + (os::set_boot_path)). */ + + len = + strlen(java_home) + strlen("/lib/resources.jar:") + + strlen(java_home) + strlen("/lib/rt.jar:") + + strlen(java_home) + strlen("/lib/sunrsasign.jar:") + + strlen(java_home) + strlen("/lib/jsse.jar:") + + strlen(java_home) + strlen("/lib/jce.jar:") + + strlen(java_home) + strlen("/lib/charsets.jar:") + + strlen(java_home) + strlen("/classes") + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcpy(boot_class_path, java_home); + strcat(boot_class_path, "/lib/resources.jar:"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/lib/rt.jar:"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/lib/sunrsasign.jar:"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/lib/jsse.jar:"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/lib/jce.jar:"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/lib/charsets.jar:"); + strcat(boot_class_path, java_home); + strcat(boot_class_path, "/classes"); - /* set JAVA_HOME to default prefix if not defined */ +# else +# error unknown classpath configuration +# endif +#else +# if defined(WITH_CLASSPATH_GNU) + + len = + strlen(CACAO_VM_ZIP) + + strlen(":") + + strlen(CLASSPATH_CLASSES) + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcpy(boot_class_path, CACAO_VM_ZIP); + strcat(boot_class_path, ":"); + strcat(boot_class_path, CLASSPATH_CLASSES); + +# elif defined(WITH_CLASSPATH_SUN) - if (env_java_home == NULL) - env_java_home = cacao_prefix; + /* This is the bootclasspath taken from HotSpot (see + hotspot/src/share/vm/runtime/os.cpp + (os::set_boot_path)). */ + + len = + strlen(CLASSPATH_PREFIX"/lib/resources.jar:") + + strlen(CLASSPATH_PREFIX"/lib/rt.jar:") + + strlen(CLASSPATH_PREFIX"/lib/sunrsasign.jar:") + + strlen(CLASSPATH_PREFIX"/lib/jsse.jar:") + + strlen(CLASSPATH_PREFIX"/lib/jce.jar:") + + strlen(CLASSPATH_PREFIX"/lib/charsets.jar:") + + strlen(CLASSPATH_PREFIX"/classes") + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcpy(boot_class_path, CLASSPATH_PREFIX"/lib/resources.jar:"); + strcat(boot_class_path, CLASSPATH_PREFIX"/lib/rt.jar:"); + strcat(boot_class_path, CLASSPATH_PREFIX"/lib/sunrsasign.jar:"); + strcat(boot_class_path, CLASSPATH_PREFIX"/lib/jsse.jar:"); + strcat(boot_class_path, CLASSPATH_PREFIX"/lib/jce.jar:"); + strcat(boot_class_path, CLASSPATH_PREFIX"/lib/charsets.jar:"); + strcat(boot_class_path, CLASSPATH_PREFIX"/classes"); + +# elif defined(WITH_CLASSPATH_CLDC1_1) + + len = + strlen(CLASSPATH_CLASSES) + + strlen("0"); + + boot_class_path = MNEW(char, len); + + strcat(boot_class_path, CLASSPATH_CLASSES); + +# else +# error unknown classpath configuration +# endif +#endif + } + + properties_add("java.boot.class.path", boot_class_path); + properties_add("sun.boot.class.path", boot_class_path); + + /* Set the classpath. */ + + p = getenv("CLASSPATH"); + + if (p != NULL) { + class_path = MNEW(char, strlen(p) + strlen("0")); + strcpy(class_path, p); + } + else { + class_path = MNEW(char, strlen(".") + strlen("0")); + strcpy(class_path, "."); + } + + properties_add("java.class.path", class_path); + +#if defined(ENABLE_JAVASE) + + /* get properties from system */ + + p = getenv("JAVA_HOME"); /* fill in system properties */ @@ -139,18 +369,7 @@ bool properties_init(void) # if defined(WITH_CLASSPATH_GNU) - /* Add /jre to java.home property. */ - - len = strlen(env_java_home) + strlen("/jre") + strlen("0"); - - java_home = MNEW(char, len); - - strcpy(java_home, env_java_home); - strcat(java_home, "/jre"); - - properties_add("java.home", java_home); - - /* get properties from system */ + /* Get properties from system. */ cwd = _Jv_getcwd(); @@ -173,25 +392,22 @@ bool properties_init(void) properties_add("java.vendor", "GNU Classpath"); properties_add("java.vendor.url", "http://www.gnu.org/software/classpath/"); - properties_add("java.class.path", _Jv_classpath); properties_add("java.class.version", CLASS_VERSION); - /* Set bootclasspath properties. One for GNU classpath and the - other for compatibility with Sun (required by most - applications). */ - - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); - # if defined(WITH_STATIC_CLASSPATH) properties_add("gnu.classpath.boot.library.path", "."); properties_add("java.library.path" , "."); # else - /* fill gnu.classpath.boot.library.path with GNU Classpath library - path */ + properties_add("gnu.classpath.boot.library.path", boot_library_path); + + /* Get and set java.library.path. */ - properties_add("gnu.classpath.boot.library.path", classpath_libdir); - properties_add("java.library.path", _Jv_java_library_path); + java_library_path = getenv("LD_LIBRARY_PATH"); + + if (java_library_path == NULL) + java_library_path = ""; + + properties_add("java.library.path", java_library_path); # endif properties_add("java.io.tmpdir", "/tmp"); @@ -208,11 +424,11 @@ bool properties_init(void) /* set the java.ext.dirs property */ - len = strlen(env_java_home) + strlen("/jre/lib/ext") + strlen("0"); + len = strlen(java_home) + strlen("/jre/lib/ext") + strlen("0"); extdirs = MNEW(char, len); - strcpy(extdirs, env_java_home); + strcpy(extdirs, java_home); strcat(extdirs, "/jre/lib/ext"); properties_add("java.ext.dirs", extdirs); @@ -288,38 +504,7 @@ bool properties_init(void) # elif defined(WITH_CLASSPATH_SUN) - /* Find correct java.home. We check if there is a JRE - co-located. */ - - /* NOTE: We use the server VM here as it should be available on - all architectures. */ - - len = - strlen(env_java_home) + - strlen("/jre/lib/"JAVA_ARCH"/server/libjvm.so") + - strlen("0"); - - java_home = MNEW(char, len); - - strcpy(java_home, env_java_home); - strcat(java_home, "/jre/lib/"JAVA_ARCH"/server/libjvm.so"); - - /* Check if that libjvm.so exists. */ - - if (access(java_home, F_OK) == 0) { - /* Yes, we add /jre to java.home. */ - - strcpy(java_home, env_java_home); - strcat(java_home, "/jre"); - } - else { - /* No, java.home is at it is. */ - - strcpy(java_home, env_java_home); - } - - properties_add("java.home", java_home); - properties_add("sun.boot.library.path", classpath_libdir); + /* Nothing to do. */ # else @@ -339,10 +524,6 @@ bool properties_init(void) # error unknown Java configuration #endif - - /* everything's ok */ - - return true; } @@ -355,7 +536,7 @@ bool properties_init(void) void properties_add(char *key, char *value) { - list_properties_entry *pe; + list_properties_entry_t *pe; /* search for the entry */ @@ -372,7 +553,7 @@ void properties_add(char *key, char *value) /* entry was not found, insert a new one */ - pe = NEW(list_properties_entry); + pe = NEW(list_properties_entry_t); pe->key = key; pe->value = value; @@ -389,7 +570,7 @@ void properties_add(char *key, char *value) char *properties_get(char *key) { - list_properties_entry *pe; + list_properties_entry_t *pe; for (pe = list_first_unsynced(list_properties); pe != NULL; pe = list_next_unsynced(list_properties, pe)) { @@ -446,10 +627,10 @@ void properties_system_add(java_handle_t *p, char *key, char *value) #if defined(ENABLE_JAVASE) void properties_system_add_all(java_handle_t *p) { - list_properties_entry *pe; - methodinfo *m; - java_handle_t *key; - java_handle_t *value; + list_properties_entry_t *pe; + methodinfo *m; + java_handle_t *key; + java_handle_t *value; /* search for method to add properties */ diff --git a/src/vm/properties.h b/src/vm/properties.h index d1e383751..c73b158be 100644 --- a/src/vm/properties.h +++ b/src/vm/properties.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: properties.h 8295 2007-08-11 17:57:24Z michi $ + $Id: properties.h 8399 2007-08-22 18:24:23Z twisti $ */ @@ -31,14 +31,16 @@ #define _PROPERTIES_H #include "config.h" -#include "vm/types.h" + +#include #include "vm/global.h" /* function prototypes ********************************************************/ -bool properties_init(void); +void properties_init(void); +void properties_set(void); void properties_add(char *key, char *value); char *properties_get(char *key); diff --git a/src/vm/vm.c b/src/vm/vm.c index c26fdb3b4..76a1cb88e 100644 --- a/src/vm/vm.c +++ b/src/vm/vm.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: vm.c 8397 2007-08-22 15:49:38Z twisti $ + $Id: vm.c 8399 2007-08-22 18:24:23Z twisti $ */ @@ -117,22 +117,9 @@ s4 vms = 0; /* number of VMs created */ bool vm_initializing = false; bool vm_exiting = false; -char *cacao_prefix = NULL; -char *cacao_libjvm = NULL; -char *classpath_libdir = NULL; - -char *_Jv_bootclasspath; /* contains the boot classpath */ -char *_Jv_classpath; /* contains the classpath */ -char *_Jv_java_library_path; - char *mainstring = NULL; classinfo *mainclass = NULL; -char *specificmethodname = NULL; -char *specificsignature = NULL; - -bool startit = true; - #if defined(ENABLE_INTRP) u1 *intrp_main_stack = NULL; #endif @@ -682,10 +669,10 @@ void vm_printconfig(void) printf(" maximum heap size : %d\n", opt_heapmaxsize); printf(" initial heap size : %d\n", opt_heapstartsize); printf(" stack size : %d\n", opt_stacksize); - printf(" libjvm.so : %s\n", cacao_libjvm); - printf(" java.boot.class.path : %s\n", _Jv_bootclasspath); - printf(" gnu.classpath.boot.library.path: %s\n", classpath_libdir); - printf(" java.class.path : %s\n", _Jv_classpath); + printf(" java.boot.class.path : %s\n", properties_get("java.boot.class.path")); + printf(" java.class.path : %s\n", properties_get("java.class.path")); + + printf(" gnu.classpath.boot.library.path: %s\n", properties_get("gnu.classpath.boot.library.path")); } @@ -776,10 +763,12 @@ bool vm_createjvm(JavaVM **p_vm, void **p_env, void *vm_args) bool vm_create(JavaVMInitArgs *vm_args) { - char *cp; - s4 len; - s4 opt; - s4 i, j; + int len; + char *p; + char *boot_class_path; + char *class_path; + int opt; + int i, j; bool opt_version; bool opt_exit; @@ -828,227 +817,6 @@ bool vm_create(JavaVMInitArgs *vm_args) _Jv_jvm->starttime = builtin_currenttimemillis(); - /* get stuff from the environment *****************************************/ - -#if defined(WITH_JRE_LAYOUT) - /* SUN also uses a buffer of 4096-bytes (strace is your friend). */ - - cacao_prefix = MNEW(char, 4096); - - if (readlink("/proc/self/exe", cacao_prefix, 4095) == -1) - vm_abort("readlink failed: %s\n", strerror(errno)); - - /* Get the path of the current executable. */ - - cacao_prefix = dirname(cacao_prefix); - - if ((strlen(cacao_prefix) + strlen("/..") + strlen("0")) > 4096) - vm_abort("libjvm name to long for buffer\n"); - - /* Walk up one directory. */ - - strcat(cacao_prefix, "/.."); - -# if defined(WITH_CLASSPATH_GNU) - - /* Set path to libjvm.so. */ - - len = - strlen(cacao_prefix) + strlen("/lib/libjvm") + - strlen("0"); - - cacao_libjvm = MNEW(char, len); - - strcpy(cacao_libjvm, cacao_prefix); - strcat(cacao_libjvm, "/lib/libjvm"); - - /* Set the path to Java core native libraries. */ - - len = - strlen(cacao_prefix) + strlen("/lib/classpath") + - strlen("0"); - - classpath_libdir = MNEW(char, len); - - strcpy(classpath_libdir, cacao_prefix); - strcat(classpath_libdir, "/lib/classpath"); - -# elif defined(WITH_CLASSPATH_SUN) - - /* Set path to libjvm.so. */ - - len = - strlen(cacao_prefix) + strlen("/lib/"JAVA_ARCH"/server/libjvm") + - strlen("0"); - - cacao_libjvm = MNEW(char, len); - - strcpy(cacao_libjvm, cacao_prefix); - strcat(cacao_libjvm, "/lib/"JAVA_ARCH"/server/libjvm"); - - /* Set the path to Java core native libraries. */ - - len = - strlen(cacao_prefix) + strlen("/lib/"JAVA_ARCH) + - strlen("0"); - - classpath_libdir = MNEW(char, len); - - strcpy(classpath_libdir, cacao_prefix); - strcat(classpath_libdir, "/lib/"JAVA_ARCH); - -# else -# error unknown classpath configuration -# endif -#else - cacao_prefix = CACAO_PREFIX; - cacao_libjvm = CACAO_LIBDIR"/libjvm"; - -# if defined(WITH_CLASSPATH_GNU) - classpath_libdir = CLASSPATH_LIBDIR"/classpath"; -# else - classpath_libdir = CLASSPATH_LIBDIR; -# endif -#endif - - /* Set the bootclasspath. */ - - cp = getenv("BOOTCLASSPATH"); - - if (cp != NULL) { - _Jv_bootclasspath = MNEW(char, strlen(cp) + strlen("0")); - strcpy(_Jv_bootclasspath, cp); - } - else { -#if defined(WITH_JRE_LAYOUT) -# if defined(WITH_CLASSPATH_GNU) - - len = - strlen(cacao_prefix) + strlen("/share/cacao/vm.zip:") + - strlen(cacao_prefix) + strlen("/share/classpath/glibj.zip") + - strlen("0"); - - _Jv_bootclasspath = MNEW(char, len); - - strcpy(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/share/cacao/vm.zip"); - strcat(_Jv_bootclasspath, ":"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/share/classpath/glibj.zip"); - -# elif defined(WITH_CLASSPATH_SUN) - - /* This is the bootclasspath taken from HotSpot (see - hotspot/src/share/vm/runtime/os.cpp - (os::set_boot_path)). */ - - len = - strlen(cacao_prefix) + strlen("/lib/resources.jar:") + - strlen(cacao_prefix) + strlen("/lib/rt.jar:") + - strlen(cacao_prefix) + strlen("/lib/sunrsasign.jar:") + - strlen(cacao_prefix) + strlen("/lib/jsse.jar:") + - strlen(cacao_prefix) + strlen("/lib/jce.jar:") + - strlen(cacao_prefix) + strlen("/lib/charsets.jar:") + - strlen(cacao_prefix) + strlen("/classes") + - strlen("0"); - - _Jv_bootclasspath = MNEW(char, len); - - strcpy(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/lib/resources.jar:"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/lib/rt.jar:"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/lib/sunrsasign.jar:"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/lib/jsse.jar:"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/lib/jce.jar:"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/lib/charsets.jar:"); - strcat(_Jv_bootclasspath, cacao_prefix); - strcat(_Jv_bootclasspath, "/classes"); - -# else -# error unknown classpath configuration -# endif -#else -# if defined(WITH_CLASSPATH_GNU) - - len = - strlen(CACAO_VM_ZIP) + - strlen(":") + - strlen(CLASSPATH_CLASSES) + - strlen("0"); - - _Jv_bootclasspath = MNEW(char, len); - - strcpy(_Jv_bootclasspath, CACAO_VM_ZIP); - strcat(_Jv_bootclasspath, ":"); - strcat(_Jv_bootclasspath, CLASSPATH_CLASSES); - -# elif defined(WITH_CLASSPATH_SUN) - - /* This is the bootclasspath taken from HotSpot (see - hotspot/src/share/vm/runtime/os.cpp - (os::set_boot_path)). */ - - len = - strlen(CLASSPATH_PREFIX"/lib/resources.jar:") + - strlen(CLASSPATH_PREFIX"/lib/rt.jar:") + - strlen(CLASSPATH_PREFIX"/lib/sunrsasign.jar:") + - strlen(CLASSPATH_PREFIX"/lib/jsse.jar:") + - strlen(CLASSPATH_PREFIX"/lib/jce.jar:") + - strlen(CLASSPATH_PREFIX"/lib/charsets.jar:") + - strlen(CLASSPATH_PREFIX"/classes") + - strlen("0"); - - _Jv_bootclasspath = MNEW(char, len); - - strcpy(_Jv_bootclasspath, CLASSPATH_PREFIX"/lib/resources.jar:"); - strcat(_Jv_bootclasspath, CLASSPATH_PREFIX"/lib/rt.jar:"); - strcat(_Jv_bootclasspath, CLASSPATH_PREFIX"/lib/sunrsasign.jar:"); - strcat(_Jv_bootclasspath, CLASSPATH_PREFIX"/lib/jsse.jar:"); - strcat(_Jv_bootclasspath, CLASSPATH_PREFIX"/lib/jce.jar:"); - strcat(_Jv_bootclasspath, CLASSPATH_PREFIX"/lib/charsets.jar:"); - strcat(_Jv_bootclasspath, CLASSPATH_PREFIX"/classes"); - -# elif defined(WITH_CLASSPATH_CLDC1_1) - - len = - strlen(CLASSPATH_CLASSES) + - strlen("0"); - - _Jv_bootclasspath = MNEW(char, len); - - strcat(_Jv_bootclasspath, CLASSPATH_CLASSES); - -# else -# error unknown classpath configuration -# endif -#endif - } - - /* Set the classpath. */ - - cp = getenv("CLASSPATH"); - - if (cp != NULL) { - _Jv_classpath = MNEW(char, strlen(cp) + strlen("0")); - strcpy(_Jv_classpath, cp); - } - else { - _Jv_classpath = MNEW(char, strlen(".") + strlen("0")); - strcpy(_Jv_classpath, "."); - } - - /* Get and set java.library.path. */ - - _Jv_java_library_path = getenv("LD_LIBRARY_PATH"); - - if (_Jv_java_library_path == NULL) - _Jv_java_library_path = ""; - /* interpret the options **************************************************/ opt_version = false; @@ -1068,16 +836,8 @@ bool vm_create(JavaVMInitArgs *vm_args) /* Initialize and fill properties before command-line handling. */ - if (!properties_init()) - vm_abort("vm_create: properties_init failed"); - - /* Set the classpath properties. */ - -#if defined(ENABLE_JAVASE) - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); - properties_add("java.class.path", _Jv_classpath); -#endif + properties_init(); + properties_set(); /* iterate over all passed options */ @@ -1109,14 +869,19 @@ bool vm_create(JavaVMInitArgs *vm_args) break; case OPT_CLASSPATH: - /* forget old classpath and set the argument as new classpath */ - MFREE(_Jv_classpath, char, strlen(_Jv_classpath)); + /* Forget old classpath and set the argument as new + classpath. */ + + class_path = properties_get("java.class.path"); - _Jv_classpath = MNEW(char, strlen(opt_arg) + strlen("0")); - strcpy(_Jv_classpath, opt_arg); + MFREE(class_path, char, len); + + p = MNEW(char, strlen(opt_arg) + strlen("0")); + + strcpy(p, opt_arg); #if defined(ENABLE_JAVASE) - properties_add("java.class.path", _Jv_classpath); + properties_add("java.class.path", p); #endif break; @@ -1140,77 +905,86 @@ bool vm_create(JavaVMInitArgs *vm_args) /* Forget default bootclasspath and set the argument as new boot classpath. */ - MFREE(_Jv_bootclasspath, char, strlen(_Jv_bootclasspath)); + boot_class_path = properties_get("sun.boot.class.path"); + + MFREE(boot_class_path, char, len); - _Jv_bootclasspath = MNEW(char, strlen(opt_arg) + strlen("0")); - strcpy(_Jv_bootclasspath, opt_arg); + p = MNEW(char, strlen(opt_arg) + strlen("0")); + + strcpy(p, opt_arg); #if defined(ENABLE_JAVASE) - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); + properties_add("sun.boot.class.path", p); + properties_add("java.boot.class.path", p); #endif break; case OPT_BOOTCLASSPATH_A: - /* append to end of bootclasspath */ + /* Append to bootclasspath. */ + + boot_class_path = properties_get("sun.boot.class.path"); - len = strlen(_Jv_bootclasspath); + len = strlen(boot_class_path); - _Jv_bootclasspath = MREALLOC(_Jv_bootclasspath, - char, - len + strlen("0"), - len + strlen(":") + - strlen(opt_arg) + strlen("0")); + p = MREALLOC(boot_class_path, + char, + len + strlen("0"), + len + strlen(":") + + strlen(opt_arg) + strlen("0")); - strcat(_Jv_bootclasspath, ":"); - strcat(_Jv_bootclasspath, opt_arg); + strcat(p, ":"); + strcat(p, opt_arg); #if defined(ENABLE_JAVASE) - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); + properties_add("sun.boot.class.path", p); + properties_add("java.boot.class.path", p); #endif break; case OPT_BOOTCLASSPATH_P: - /* prepend in front of bootclasspath */ + /* Prepend to bootclasspath. */ + + boot_class_path = properties_get("sun.boot.class.path"); - cp = _Jv_bootclasspath; - len = strlen(cp); + len = strlen(boot_class_path); - _Jv_bootclasspath = MNEW(char, strlen(opt_arg) + strlen(":") + - len + strlen("0")); + p = MNEW(char, strlen(opt_arg) + strlen(":") + len + strlen("0")); - strcpy(_Jv_bootclasspath, opt_arg); - strcat(_Jv_bootclasspath, ":"); - strcat(_Jv_bootclasspath, cp); + strcpy(p, opt_arg); + strcat(p, ":"); + strcat(p, boot_class_path); - MFREE(cp, char, len); + MFREE(boot_class_path, char, len); #if defined(ENABLE_JAVASE) - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); + properties_add("sun.boot.class.path", p); + properties_add("java.boot.class.path", p); #endif break; case OPT_BOOTCLASSPATH_C: - /* use as Java core library, but prepend VM interface classes */ + /* Use as Java core library, but prepend VM interface + classes. */ - MFREE(_Jv_bootclasspath, char, strlen(_Jv_bootclasspath)); + boot_class_path = properties_get("sun.boot.class.path"); - len = strlen(CACAO_VM_ZIP) + + MFREE(boot_class_path, char, strlen(boot_class_path)); + + len = + strlen(CACAO_VM_ZIP) + strlen(":") + strlen(opt_arg) + strlen("0"); - _Jv_bootclasspath = MNEW(char, len); + p = MNEW(char, len); - strcpy(_Jv_bootclasspath, CACAO_VM_ZIP); - strcat(_Jv_bootclasspath, ":"); - strcat(_Jv_bootclasspath, opt_arg); + strcpy(p, CACAO_VM_ZIP); + strcat(p, ":"); + strcat(p, opt_arg); #if defined(ENABLE_JAVASE) - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); + properties_add("sun.boot.class.path", p); + properties_add("java.boot.class.path", p); #endif break; @@ -1614,16 +1388,16 @@ bool vm_create(JavaVMInitArgs *vm_args) if (opt_jar == true) { /* free old classpath */ - MFREE(_Jv_classpath, char, strlen(_Jv_classpath)); +/* MFREE(_Jv_classpath, char, strlen(_Jv_classpath)); */ /* put jarfile into classpath */ - _Jv_classpath = MNEW(char, strlen(mainstring) + strlen("0")); + p = MNEW(char, strlen(mainstring) + strlen("0")); - strcpy(_Jv_classpath, mainstring); + strcpy(p, mainstring); #if defined(ENABLE_JAVASE) - properties_add("java.class.path", _Jv_classpath); + properties_add("java.class.path", p); #endif } else { @@ -1703,7 +1477,8 @@ bool vm_create(JavaVMInitArgs *vm_args) /* AFTER: utf8_init */ - suck_add(_Jv_bootclasspath); + boot_class_path = properties_get("sun.boot.class.path"); + suck_add(boot_class_path); /* initialize the classcache hashtable stuff: lock, hashtable (must be done _after_ threads_preinit) */ diff --git a/src/vm/vm.h b/src/vm/vm.h index 8e2a1a810..aa6a427e0 100644 --- a/src/vm/vm.h +++ b/src/vm/vm.h @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: vm.h 8318 2007-08-16 10:05:34Z michi $ + $Id: vm.h 8399 2007-08-22 18:24:23Z twisti $ */ @@ -52,14 +52,6 @@ extern _Jv_JNIEnv *_Jv_env; extern bool vm_initializing; extern bool vm_exiting; -extern char *cacao_prefix; -extern char *cacao_libjvm; -extern char *classpath_libdir; - -extern char *_Jv_bootclasspath; -extern char *_Jv_classpath; -extern char *_Jv_java_library_path; - extern char *mainstring; extern classinfo *mainclass; diff --git a/src/vmcore/suck.c b/src/vmcore/suck.c index f46d243cf..95c7a94db 100644 --- a/src/vmcore/suck.c +++ b/src/vmcore/suck.c @@ -22,7 +22,7 @@ Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - $Id: suck.c 8236 2007-07-27 10:18:17Z twisti $ + $Id: suck.c 8399 2007-08-22 18:24:23Z twisti $ */ @@ -244,7 +244,8 @@ void suck_add_from_property(char *key) s4 n; s4 i; s4 namlen; - char *tmpbootclasspath; + char *boot_class_path; + char *p; /* get the property value */ @@ -293,40 +294,35 @@ void suck_add_from_property(char *key) namlen = strlen(namelist[i]->d_name); #endif - /* reallocate memory for bootclasspath */ + /* Allocate memory for bootclasspath. */ - tmpbootclasspath = MNEW(char, - pathlen + strlen("/") + namlen + - strlen(":") + - strlen(_Jv_bootclasspath) + - strlen("0")); + boot_class_path = properties_get("sun.boot.class.path"); - /* prepend the file found to bootclasspath */ + p = MNEW(char, + pathlen + strlen("/") + namlen + + strlen(":") + + strlen(boot_class_path) + + strlen("0")); - strcpy(tmpbootclasspath, path); - strcat(tmpbootclasspath, "/"); - strcat(tmpbootclasspath, namelist[i]->d_name); - strcat(tmpbootclasspath, ":"); + /* Prepend the file found to the bootclasspath. */ - strcat(tmpbootclasspath, _Jv_bootclasspath); + strcpy(p, path); + strcat(p, "/"); + strcat(p, namelist[i]->d_name); + strcat(p, ":"); + strcat(p, boot_class_path); - /* free old bootclasspath memory */ + MFREE(boot_class_path, u1, strlen(boot_class_path)); - MFREE(_Jv_bootclasspath, u1, strlen(_Jv_bootclasspath)); - - /* and set the new bootclasspath */ - - _Jv_bootclasspath = tmpbootclasspath; +#if defined(ENABLE_JAVASE) + properties_add("sun.boot.class.path", p); + properties_add("java.boot.class.path", p); +#endif /* free the memory allocated by scandir */ /* (We use `free` as the memory came from the C library.) */ free(namelist[i]); - -#if defined(ENABLE_JAVASE) - properties_add("java.boot.class.path", _Jv_bootclasspath); - properties_add("sun.boot.class.path", _Jv_bootclasspath); -#endif } } -- 2.25.1