blob: f687bbb197555be2af6f994ef0e34a1af080286f [file] [log] [blame]
#include <sys/utsname.h>
extern "C" {
void setProperty(Jnjvm* vm, JavaObject* prop, const char* key,
const char* val) {
JavaString* Val = 0;
JavaString* Key = 0;
llvm_gcroot(prop, 0);
llvm_gcroot(Val, 0);
llvm_gcroot(Key, 0);
Val = vm->asciizToStr(val);
Key = vm->asciizToStr(key);
vm->upcalls->setProperty->invokeIntSpecial(
vm, (UserClass*)JavaObject::getClass(prop), prop, &Key, &Val);
}
void setUnameProp(Jnjvm* vm, JavaObject* prop) {
llvm_gcroot(prop, 0);
struct utsname infos;
uname(&infos);
setProperty(vm, prop, "os.name", infos.sysname);
setProperty(vm, prop, "os.arch", infos.machine);
setProperty(vm, prop, "os.version", infos.release);
if (!strcmp(infos.machine, "ppc")) {
setProperty(vm, prop, "gnu.cpu.endian","big");
} else {
setProperty(vm, prop, "gnu.cpu.endian","little");
}
}
void setProperties(JavaObject * prop) {
llvm_gcroot(prop, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
const char* tmp;
setProperty(vm, prop, "java.vm.specification.version", "1.0");
setProperty(vm, prop, "java.vm.specification.vendor",
"Sun Microsystems, Inc");
setProperty(vm, prop, "java.vm.specification.name",
"Java Virtual Machine Specification");
setProperty(vm, prop, "java.specification.version", "1.5");
setProperty(vm, prop, "java.specification.vendor", "Sun Microsystems, Inc");
setProperty(vm, prop, "java.specification.name",
"Java Platform API Specification");
setProperty(vm, prop, "java.version", "1.5");
setProperty(vm, prop, "java.runtime.version", "1.5");
setProperty(vm, prop, "java.vendor", "The VMKit Project");
setProperty(vm, prop, "java.vendor.url", "http://vmkit.llvm.org");
tmp = getenv("JAVA_HOME");
if (!tmp) tmp = "";
setProperty(vm, prop, "java.home", tmp);
JnjvmBootstrapLoader* JCL = vm->bootstrapLoader;
setProperty(vm, prop, "java.class.version", "49.0");
setProperty(vm, prop, "java.class.path", vm->classpath);
setProperty(vm, prop, "java.boot.class.path", JCL->bootClasspathEnv);
setProperty(vm, prop, "sun.boot.class.path", JCL->bootClasspathEnv);
setProperty(vm, prop, "java.vm.version", "0.28");
setProperty(vm, prop, "java.vm.vendor", "The VMKit Project");
setProperty(vm, prop, "java.vm.name", "J3");
setProperty(vm, prop, "java.specification.version", "1.5");
setProperty(vm, prop, "java.io.tmpdir", "/tmp");
setProperty(vm, prop, "build.compiler", "gcj");
setProperty(vm, prop, "gcj.class.path", JCL->bootClasspathEnv);
setProperty(vm, prop, "gnu.classpath.boot.library.path",
JCL->libClasspathEnv);
//setProperty(vm, prop, "java.library.path", TODO: getenv("LD_LIBRARY_PATH"))
setProperty(vm, prop, "sun.boot.library.path", JCL->libClasspathEnv);
// Align behavior with GNU Classpath for now, to pass mauve test
setProperty(vm, prop, "sun.lang.ClassLoader.allowArraySyntax", "true");
setUnameProp(vm, prop);
setProperty(vm, prop, "file.separator", vm->dirSeparator);
setProperty(vm, prop, "path.separator", vm->envSeparator);
setProperty(vm, prop, "line.separator", "\n");
tmp = getenv("USERNAME");
if (!tmp) tmp = getenv("LOGNAME");
if (!tmp) tmp = getenv("NAME");
if (!tmp) tmp = "";
setProperty(vm, prop, "user.name", tmp);
tmp = getenv("HOME");
if (!tmp) tmp = "";
setProperty(vm, prop, "user.home", tmp);
tmp = getenv("PWD");
if (!tmp) tmp = "";
setProperty(vm, prop, "user.dir", tmp);
// Disable this property. The Classpath iconv implementation is really
// not optimized (it over-abuses JNI calls).
//setProperty(vm, prop, "gnu.classpath.nio.charset.provider.iconv", "true");
setProperty(vm, prop, "file.encoding", "ISO8859_1");
setProperty(vm, prop, "gnu.java.util.zoneinfo.dir", "/usr/share/zoneinfo");
}
void setCommandLineProperties(JavaObject * prop) {
llvm_gcroot(prop, 0);
Jnjvm* vm = JavaThread::get()->getJVM();
for (std::vector<std::pair<char*, char*> >::iterator i =
vm->postProperties.begin(), e = vm->postProperties.end(); i!= e; i++) {
setProperty(vm, prop, i->first, i->second);
}
}
}