[vmkit-commits] [PATCH] Refactor out property-setting from GNUCP to shared 'SetProperties.inc'

Will Dietz wdietz2 at illinois.edu
Mon Oct 24 15:48:42 PDT 2011


Inlined below.

~Will

>From 2dc8172b60301f98bf98d1ab2e17237f5da8540c Mon Sep 17 00:00:00 2001
From: Will Dietz <w at wdtz.org>
Date: Fri, 14 Oct 2011 04:08:44 -0500
Subject: [PATCH 12/29] Refactor out property-setting from GNUCP to shared
 'SetProperties.inc'.

---
 .../GNUClasspath/ClasspathVMSystemProperties.inc   |  105 +-----------------
 lib/J3/ClassLib/SetProperties.inc                  |  117 ++++++++++++++++++++
 2 files changed, 121 insertions(+), 101 deletions(-)
 create mode 100644 lib/J3/ClassLib/SetProperties.inc

diff --git a/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
b/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
index 7e9e5c1..e126122 100644
--- a/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
+++ b/lib/J3/ClassLib/GNUClasspath/ClasspathVMSystemProperties.inc
@@ -20,41 +20,12 @@
 #include "JavaUpcalls.h"
 #include "Jnjvm.h"

+#include "SetProperties.inc"
+
 using namespace j3;

 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");
-  }
-}

 JNIEXPORT void JNICALL Java_gnu_classpath_VMSystemProperties_preInit(
 #ifdef NATIVE_JNI
@@ -67,71 +38,7 @@ JavaObject* prop) {

   BEGIN_NATIVE_EXCEPTION(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");
-
-  tmp = getenv("JAVA_COMPILER");
-  if (!tmp) tmp = "gcj";
-  setProperty(vm, prop, "java.compiler", 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);
-
-  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");
+  setProperties(prop);

   END_NATIVE_EXCEPTION
 }
@@ -142,11 +49,7 @@ extern "C" void
Java_gnu_classpath_VMSystemProperties_postInit__Ljava_util_Prope

   BEGIN_NATIVE_EXCEPTION(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);
-  }
+  setCommandLineProperties(prop);

   END_NATIVE_EXCEPTION
 }
diff --git a/lib/J3/ClassLib/SetProperties.inc
b/lib/J3/ClassLib/SetProperties.inc
new file mode 100644
index 0000000..7f3063f
--- /dev/null
+++ b/lib/J3/ClassLib/SetProperties.inc
@@ -0,0 +1,117 @@
+#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");
+
+  tmp = getenv("JAVA_COMPILER");
+  if (!tmp) tmp = "gcj";
+  setProperty(vm, prop, "java.compiler", 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);
+
+
+  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);
+  }
+
+}
+}
-- 
1.7.5.1



More information about the vmkit-commits mailing list