-/* nat/Runtime.c - java/lang/Runtime
+/* native/vm/VMRuntime.c - java/lang/VMRuntime
- Copyright (C) 1996, 1997, 1998, 1999, 2000, 2001, 2002, 2003
- R. Grafl, A. Krall, C. Kruegel, C. Oates, R. Obermaisser,
- M. Probst, S. Ring, E. Steiner, C. Thalinger, D. Thuernbeck,
- P. Tomsich, J. Wenninger
+ Copyright (C) 1996-2005 R. Grafl, A. Krall, C. Kruegel, C. Oates,
+ R. Obermaisser, M. Platter, M. Probst, S. Ring, E. Steiner,
+ C. Thalinger, D. Thuernbeck, P. Tomsich, C. Ullrich, J. Wenninger,
+ Institut f. Computersprachen - TU Wien
This file is part of CACAO.
Changes: Joseph Wenninger
Christian Thalinger
- $Id: VMRuntime.c 1506 2004-11-14 14:48:49Z jowenn $
+ $Id: VMRuntime.c 1735 2004-12-07 14:33:27Z twisti $
*/
#include <stdlib.h>
#include <unistd.h>
#include <sys/utsname.h>
-#include "exceptions.h"
-#include "main.h"
-#include "jni.h"
-#include "builtin.h"
-#include "exceptions.h"
-#include "loader.h"
-#include "native.h"
-#include "tables.h"
-#include "asmpart.h"
-#include "mm/boehm.h"
-#include "toolbox/logging.h"
-#include "toolbox/memory.h"
-#include "nat/java_io_File.h"
-#include "nat/java_lang_String.h"
-#include "nat/java_lang_Process.h"
-#include "nat/java_util_Properties.h" /* needed for java_lang_VMRuntime.h */
-#include "nat/java_lang_VMRuntime.h"
-#include "config.h"
-#ifndef STATIC_CLASSPATH
+#if !defined(STATIC_CLASSPATH)
#include <dlfcn.h>
#endif
+#include "config.h"
+#include "cacao/cacao.h"
+#include "mm/boehm.h"
+#include "mm/memory.h"
+#include "native/jni.h"
+#include "native/native.h"
+#include "native/include/java_io_File.h"
+#include "native/include/java_lang_String.h"
+#include "native/include/java_lang_Process.h"
+#include "native/include/java_util_Properties.h" /* java_lang_VMRuntime.h */
+#include "native/include/java_lang_VMRuntime.h"
+#include "toolbox/logging.h"
+#include "vm/builtin.h"
+#include "vm/exceptions.h"
+#include "vm/loader.h"
+#include "vm/tables.h"
+#include "vm/jit/asmpart.h"
+
+
/* this should work on BSD */
/*
#if defined(__DARWIN__)
typedef struct property property;
struct property {
- char *key;
- char *value;
+ char *key;
+ char *value;
property *next;
};
{
int retVal=0;
+#ifdef JOWENN_DEBUG
char *buffer;
int buffer_len;
+#endif
utf *data;
#ifdef JOWENN_DEBUG
#ifndef STATIC_CLASSPATH
/*here it could be interesting to store the references in a list eg for nicely cleaning up or for certain platforms*/
if (dlopen(data->text,RTLD_NOW | RTLD_GLOBAL)) {
- log_text("LIBLOADED");
+ /*log_text("LIBLOADED");*/
retVal=1;
}
#else
/*
- * Class: java_lang_VMRuntime
+ * Class: java/lang/VMRuntime
* Method: nativeGetLibname
* Signature: (Ljava/lang/String;Ljava/lang/String;)Ljava/lang/String;
*/
-JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMRuntime_nativeGetLibname(JNIEnv *env, jclass clazz, java_lang_String *par1, java_lang_String *par2)
+JNIEXPORT java_lang_String* JNICALL Java_java_lang_VMRuntime_nativeGetLibname(JNIEnv *env, jclass clazz, java_lang_String *pathname, java_lang_String *libname)
{
char *buffer;
int buffer_len;
- utf *data;
- java_lang_String *resultString;
- data = javastring_toutf(par2, 0);
+ utf *u;
+ java_lang_String *s;
+
+ if (!libname) {
+ *exceptionptr = new_nullpointerexception();
+ return NULL;
+ }
+
+ u = javastring_toutf(libname, 0);
- if (!data) {
+ if (!u) {
log_text("nativeGetLibName: Error: empty string");
return 0;;
}
- buffer_len = utf_strlen(data) + 6 /*lib .so */ +1 /*0*/;
+ buffer_len = utf_strlen(u) + 6 /*lib .so */ +1 /*0*/;
buffer = MNEW(char, buffer_len);
- sprintf(buffer,"lib");
- utf_sprint(buffer+3,data);
- strcat(buffer,".so");
+
+ sprintf(buffer, "lib");
+ utf_sprint(buffer + 3, u);
+ strcat(buffer, ".so");
+
#ifdef JOWENN_DEBUG
- log_text("nativeGetLibName:");
+ log_text("nativeGetLibName:");
log_text(buffer);
#endif
- resultString=javastring_new_char(buffer);
+ s = javastring_new_char(buffer);
MFREE(buffer, char, buffer_len);
- return resultString;
+
+ return s;
}
char *user;
char *home;
struct utsname utsnamebuf;
+#if !defined(STATIC_CLASSPATH)
+ char *libpath;
+ s4 libpathlen;
+#endif
if (!p) {
- *exceptionptr = new_exception(string_java_lang_NullPointerException);
+ *exceptionptr = new_nullpointerexception();
return;
}
insert_property(m, p, "java.specification.name", "Java Platform API Specification");
insert_property(m, p, "java.class.version", "48.0");
insert_property(m, p, "java.class.path", classpath);
+
#if defined(STATIC_CLASSPATH)
insert_property(m, p, "java.library.path" , ".");
#else
- insert_property(m, p, "java.library.path" , getenv("LD_LIBRARY_PATH"));
+ libpathlen = strlen(INSTALL_PREFIX) + strlen(CACAO_LIBRARY_PATH) + 1;
+
+ if (getenv("CACAO_LIB_OVERRIDE"))
+ libpathlen += strlen(getenv("CACAO_LIB_OVERRIDE")) + 1;
+
+ if (getenv("LD_LIBRARY_PATH"))
+ libpathlen += strlen(getenv("LD_LIBRARY_PATH")) + 1;
+
+ libpath = MNEW(char, libpathlen);
+
+ if (getenv("CACAO_LIB_OVERRIDE")) {
+ strcat(libpath, getenv("CACAO_LIB_OVERRIDE"));
+ strcat(libpath, ":");
+ }
+
+ strcat(libpath, INSTALL_PREFIX);
+ strcat(libpath, CACAO_LIBRARY_PATH);
+
+ if (getenv("LD_LIBRARY_PATH")) {
+ strcat(libpath, ":");
+ strcat(libpath, getenv("LD_LIBRARY_PATH"));
+ }
+ insert_property(m, p, "java.library.path", libpath);
+
+ MFREE(libpath, char, libpathlen);
#endif
+
insert_property(m, p, "java.io.tmpdir", "/tmp");
insert_property(m, p, "java.compiler", "cacao.jit");
- insert_property(m, p, "java.ext.dirs", "null");
+ insert_property(m, p, "java.ext.dirs", "");
insert_property(m, p, "os.name", utsnamebuf.sysname);
insert_property(m, p, "os.arch", utsnamebuf.machine);
insert_property(m, p, "os.version", utsnamebuf.release);
/* XXX do we need this one? */
{ "java.protocol.handler.pkgs", "gnu.java.net.protocol"}
#endif
- insert_property(m,p,"java.protocol.handler.pkgs","gnu.java.net.protocol");
+ insert_property(m, p, "java.protocol.handler.pkgs", "gnu.java.net.protocol");
/* insert properties defined on commandline */