OSDN Git Service

2005-04-25 Archie Cobbs <archie@dellroad.org>
authormkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Apr 2005 19:48:35 +0000 (19:48 +0000)
committermkoch <mkoch@138bc75d-0d04-0410-961f-82ee72b054a4>
Mon, 25 Apr 2005 19:48:35 +0000 (19:48 +0000)
* java/lang/Throwable.java: simplify initializing cause in constructor

2005-04-25  Michael Koch  <konqueror@gmx.de>

* gnu/classpath/SystemProperties.java: New file.
* gnu/classpath/natSystemProperties.cc: New file.
* java/lang/Runtime.java
(defaultProperties): Removed.
(static): Likewise.
(): Made thrown exceptions more verbose.
(insertSystemProperties): Removed.
* java/lang/System.java
(static): Likewise.
(properties): Likewise.
(setSecurityManager): Reordered modifiers.
(getenv): Improved javadoc.
(): Likewise.
(isWordsBigEndian): Removed.
* java/lang/natRuntime.cc
(_Jv_SetDLLSearchPath): Likewise.
(file_encoding): Likewise.
(default_file_encoding): Likewise.
(getpwuid_adaptor): Likewise.
(insertSystemProperties): Likewise.
* java/lang/natSystem.cc
(isWordsBigEndian): Likewise.
* Makefile.am
(ordinary_java_source_files):
Added gnu/classpath/SystemProperties.java.
(nat_source_files): Added gnu/classpath/natSystemProperties.cc.
* Makefile.in: Regenerated.

git-svn-id: svn+ssh://gcc.gnu.org/svn/gcc/trunk@98734 138bc75d-0d04-0410-961f-82ee72b054a4

libjava/ChangeLog
libjava/Makefile.am
libjava/Makefile.in
libjava/gnu/classpath/SystemProperties.java [new file with mode: 0644]
libjava/gnu/classpath/natSystemProperties.cc [new file with mode: 0644]
libjava/java/lang/Runtime.java
libjava/java/lang/System.java
libjava/java/lang/Throwable.java
libjava/java/lang/natRuntime.cc
libjava/java/lang/natSystem.cc

index c43b743..9e7922a 100644 (file)
@@ -1,3 +1,37 @@
+2005-04-25  Archie Cobbs  <archie@dellroad.org>
+
+       * java/lang/Throwable.java: simplify initializing cause in constructor
+
+2005-04-25  Michael Koch  <konqueror@gmx.de>
+
+       * gnu/classpath/SystemProperties.java: New file.
+       * gnu/classpath/natSystemProperties.cc: New file.
+       * java/lang/Runtime.java
+       (defaultProperties): Removed.
+       (static): Likewise.
+       (): Made thrown exceptions more verbose.
+       (insertSystemProperties): Removed.
+       * java/lang/System.java
+       (static): Likewise.
+       (properties): Likewise.
+       (setSecurityManager): Reordered modifiers.
+       (getenv): Improved javadoc.
+       (): Likewise.
+       (isWordsBigEndian): Removed.
+       * java/lang/natRuntime.cc
+       (_Jv_SetDLLSearchPath): Likewise.
+       (file_encoding): Likewise.
+       (default_file_encoding): Likewise.
+       (getpwuid_adaptor): Likewise.
+       (insertSystemProperties): Likewise.
+       * java/lang/natSystem.cc
+       (isWordsBigEndian): Likewise.
+       * Makefile.am
+       (ordinary_java_source_files):
+       Added gnu/classpath/SystemProperties.java.
+       (nat_source_files): Added gnu/classpath/natSystemProperties.cc.
+       * Makefile.in: Regenerated.
+
 2005-04-25  Roman Kennke  <roman@kennke.org>
 
        * javax/swing/plaf/basic/BasicScrollBarUI.java
index 89cb633..ec82b73 100644 (file)
@@ -3122,6 +3122,7 @@ java/util/regex/PatternSyntaxException.java
 ordinary_java_source_files = $(core_java_source_files) \
 gnu/classpath/ServiceFactory.java \
 gnu/classpath/ServiceProviderLoadingAction.java \
+gnu/classpath/SystemProperties.java \
 gnu/gcj/Core.java \
 gnu/gcj/RawData.java \
 gnu/gcj/RawDataManaged.java \
@@ -3884,6 +3885,7 @@ math_c_source_files = \
 
 ## This lists all the C++ source files in subdirectories.
 nat_source_files = \
+gnu/classpath/natSystemProperties.cc \
 gnu/gcj/natCore.cc \
 gnu/gcj/convert/JIS0208_to_Unicode.cc \
 gnu/gcj/convert/JIS0212_to_Unicode.cc \
index aa822ca..926b5da 100644 (file)
@@ -238,7 +238,8 @@ libgcj0_convenience_la_DEPENDENCIES = gnu-xml.lo javax-imageio.lo \
        external/w3c_dom/libw3c-gcj.la
 am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
        stacktrace.cc link.cc defineclass.cc interpret.cc verify.cc \
-       gnu/gcj/natCore.cc gnu/gcj/convert/JIS0208_to_Unicode.cc \
+       gnu/classpath/natSystemProperties.cc gnu/gcj/natCore.cc \
+       gnu/gcj/convert/JIS0208_to_Unicode.cc \
        gnu/gcj/convert/JIS0212_to_Unicode.cc \
        gnu/gcj/convert/Unicode_to_JIS.cc gnu/gcj/convert/natIconv.cc \
        gnu/gcj/convert/natInput_EUCJIS.cc \
@@ -453,9 +454,10 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
        java/util/regex/PatternSyntaxException.java \
        gnu/classpath/ServiceFactory.java \
        gnu/classpath/ServiceProviderLoadingAction.java \
-       gnu/gcj/Core.java gnu/gcj/RawData.java \
-       gnu/gcj/RawDataManaged.java gnu/gcj/io/DefaultMimeTypes.java \
-       gnu/gcj/io/MimeTypes.java gnu/gcj/io/SimpleSHSStream.java \
+       gnu/classpath/SystemProperties.java gnu/gcj/Core.java \
+       gnu/gcj/RawData.java gnu/gcj/RawDataManaged.java \
+       gnu/gcj/io/DefaultMimeTypes.java gnu/gcj/io/MimeTypes.java \
+       gnu/gcj/io/SimpleSHSStream.java \
        gnu/gcj/runtime/BootClassLoader.java \
        gnu/gcj/runtime/ExtensionClassLoader.java \
        gnu/gcj/runtime/FileDeleter.java \
@@ -2281,8 +2283,8 @@ am__libgcj0_convenience_la_SOURCES_DIST = prims.cc jni.cc exception.cc \
        gnu/classpath/Configuration.java boehm.cc nogc.cc \
        sysdep/dwarf2-backtrace.cc posix.cc win32.cc darwin.cc \
        posix-threads.cc win32-threads.cc no-threads.cc
-am__objects_5 = gnu/gcj/natCore.lo \
-       gnu/gcj/convert/JIS0208_to_Unicode.lo \
+am__objects_5 = gnu/classpath/natSystemProperties.lo \
+       gnu/gcj/natCore.lo gnu/gcj/convert/JIS0208_to_Unicode.lo \
        gnu/gcj/convert/JIS0212_to_Unicode.lo \
        gnu/gcj/convert/Unicode_to_JIS.lo gnu/gcj/convert/natIconv.lo \
        gnu/gcj/convert/natInput_EUCJIS.lo \
@@ -3585,7 +3587,8 @@ am__objects_13 = org/ietf/jgss/GSSManager.lo \
        org/ietf/jgss/Oid.lo org/ietf/jgss/GSSCredential.lo \
        org/ietf/jgss/ChannelBinding.lo
 am__objects_14 = $(am__objects_8) gnu/classpath/ServiceFactory.lo \
-       gnu/classpath/ServiceProviderLoadingAction.lo gnu/gcj/Core.lo \
+       gnu/classpath/ServiceProviderLoadingAction.lo \
+       gnu/classpath/SystemProperties.lo gnu/gcj/Core.lo \
        gnu/gcj/RawData.lo gnu/gcj/RawDataManaged.lo \
        gnu/gcj/io/DefaultMimeTypes.lo gnu/gcj/io/MimeTypes.lo \
        gnu/gcj/io/SimpleSHSStream.lo \
@@ -6911,6 +6914,7 @@ java/util/regex/PatternSyntaxException.java
 ordinary_java_source_files = $(core_java_source_files) \
 gnu/classpath/ServiceFactory.java \
 gnu/classpath/ServiceProviderLoadingAction.java \
+gnu/classpath/SystemProperties.java \
 gnu/gcj/Core.java \
 gnu/gcj/RawData.java \
 gnu/gcj/RawDataManaged.java \
@@ -7668,6 +7672,7 @@ math_c_source_files = \
   java/lang/k_cos.c       java/lang/s_sin.c       java/lang/sf_fabs.c
 
 nat_source_files = \
+gnu/classpath/natSystemProperties.cc \
 gnu/gcj/natCore.cc \
 gnu/gcj/convert/JIS0208_to_Unicode.cc \
 gnu/gcj/convert/JIS0212_to_Unicode.cc \
@@ -8194,6 +8199,14 @@ jni/classpath/lib_gnu_java_awt_peer_gtk_la-native_state.lo:  \
        jni/classpath/$(DEPDIR)/$(am__dirstamp)
 lib-gnu-java-awt-peer-gtk.la: $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_DEPENDENCIES) 
        $(lib_gnu_java_awt_peer_gtk_la_LINK) $(am_lib_gnu_java_awt_peer_gtk_la_rpath) $(lib_gnu_java_awt_peer_gtk_la_LDFLAGS) $(lib_gnu_java_awt_peer_gtk_la_OBJECTS) $(lib_gnu_java_awt_peer_gtk_la_LIBADD) $(LIBS)
+gnu/classpath/$(am__dirstamp):
+       @$(mkdir_p) gnu/classpath
+       @: > gnu/classpath/$(am__dirstamp)
+gnu/classpath/$(DEPDIR)/$(am__dirstamp):
+       @$(mkdir_p) gnu/classpath/$(DEPDIR)
+       @: > gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+gnu/classpath/natSystemProperties.lo: gnu/classpath/$(am__dirstamp) \
+       gnu/classpath/$(DEPDIR)/$(am__dirstamp)
 gnu/gcj/$(am__dirstamp):
        @$(mkdir_p) gnu/gcj
        @: > gnu/gcj/$(am__dirstamp)
@@ -9041,17 +9054,13 @@ java/util/regex/Pattern.lo: java/util/regex/$(am__dirstamp) \
 java/util/regex/PatternSyntaxException.lo:  \
        java/util/regex/$(am__dirstamp) \
        java/util/regex/$(DEPDIR)/$(am__dirstamp)
-gnu/classpath/$(am__dirstamp):
-       @$(mkdir_p) gnu/classpath
-       @: > gnu/classpath/$(am__dirstamp)
-gnu/classpath/$(DEPDIR)/$(am__dirstamp):
-       @$(mkdir_p) gnu/classpath/$(DEPDIR)
-       @: > gnu/classpath/$(DEPDIR)/$(am__dirstamp)
 gnu/classpath/ServiceFactory.lo: gnu/classpath/$(am__dirstamp) \
        gnu/classpath/$(DEPDIR)/$(am__dirstamp)
 gnu/classpath/ServiceProviderLoadingAction.lo:  \
        gnu/classpath/$(am__dirstamp) \
        gnu/classpath/$(DEPDIR)/$(am__dirstamp)
+gnu/classpath/SystemProperties.lo: gnu/classpath/$(am__dirstamp) \
+       gnu/classpath/$(DEPDIR)/$(am__dirstamp)
 gnu/gcj/Core.lo: gnu/gcj/$(am__dirstamp) \
        gnu/gcj/$(DEPDIR)/$(am__dirstamp)
 gnu/gcj/RawData.lo: gnu/gcj/$(am__dirstamp) \
@@ -15017,6 +15026,10 @@ mostlyclean-compile:
        -rm -f gnu/classpath/ServiceFactory.lo
        -rm -f gnu/classpath/ServiceProviderLoadingAction.$(OBJEXT)
        -rm -f gnu/classpath/ServiceProviderLoadingAction.lo
+       -rm -f gnu/classpath/SystemProperties.$(OBJEXT)
+       -rm -f gnu/classpath/SystemProperties.lo
+       -rm -f gnu/classpath/natSystemProperties.$(OBJEXT)
+       -rm -f gnu/classpath/natSystemProperties.lo
        -rm -f gnu/gcj/Core.$(OBJEXT)
        -rm -f gnu/gcj/Core.lo
        -rm -f gnu/gcj/RawData.$(OBJEXT)
@@ -20071,6 +20084,8 @@ distclean-compile:
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/Configuration.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/ServiceFactory.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/ServiceProviderLoadingAction.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/SystemProperties.Plo@am__quote@
+@AMDEP_TRUE@@am__include@ @am__quote@gnu/classpath/$(DEPDIR)/natSystemProperties.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/Core.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/RawData.Plo@am__quote@
 @AMDEP_TRUE@@am__include@ @am__quote@gnu/gcj/$(DEPDIR)/RawDataManaged.Plo@am__quote@
diff --git a/libjava/gnu/classpath/SystemProperties.java b/libjava/gnu/classpath/SystemProperties.java
new file mode 100644 (file)
index 0000000..ee64280
--- /dev/null
@@ -0,0 +1,154 @@
+/* SystemProperties.java -- Manage the System properties.
+   Copyright (C) 2004, 2005 Free Software Foundation
+
+This file is part of GNU Classpath.
+
+GNU Classpath is free software; you can redistribute it and/or modify
+it under the terms of the GNU General Public License as published by
+the Free Software Foundation; either version 2, or (at your option)
+any later version.
+
+GNU Classpath is distributed in the hope that it will be useful, but
+WITHOUT ANY WARRANTY; without even the implied warranty of
+MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
+General Public License for more details.
+
+You should have received a copy of the GNU General Public License
+along with GNU Classpath; see the file COPYING.  If not, write to the
+Free Software Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA
+02111-1307 USA.
+
+Linking this library statically or dynamically with other modules is
+making a combined work based on this library.  Thus, the terms and
+conditions of the GNU General Public License cover the whole
+combination.
+
+As a special exception, the copyright holders of this library give you
+permission to link this library with independent modules to produce an
+executable, regardless of the license terms of these independent
+modules, and to copy and distribute the resulting executable under
+terms of your choice, provided that you also meet, for each linked
+independent module, the terms and conditions of the license of that
+module.  An independent module is a module which is not derived from
+or based on this library.  If you modify this library, you may extend
+this exception to your version of the library, but you are not
+obligated to do so.  If you do not wish to do so, delete this
+exception statement from your version. */
+
+
+package gnu.classpath;
+
+import java.util.Properties;
+
+/**
+ * The class manages the System properties. This class is only available to
+ * privileged code (i.e. code loaded by the bootstrap class loader) and
+ * therefore doesn't do any security checks.
+ * This class is separated out from java.lang.System to simplify bootstrap
+ * dependencies and to allow trusted code a simple and efficient mechanism
+ * to access the system properties.
+ */
+public class SystemProperties
+{
+  /**
+   * Stores the current system properties. This can be modified by
+   * {@link #setProperties(Properties)}, but will never be null, because
+   * setProperties(null) sucks in the default properties.
+   */
+  private static Properties properties;
+
+  /**
+   * The default properties. Once the default is stabilized,
+   * it should not be modified;
+   * instead it is cloned when calling <code>setProperties(null)</code>.
+   */
+  private static final Properties defaultProperties = new Properties();
+
+  private static native void insertSystemProperties(Properties properties);
+
+  static
+  {
+    insertSystemProperties(defaultProperties);
+
+    // Set base URL if not already set.
+    if (defaultProperties.get("gnu.classpath.home.url") == null)
+      defaultProperties.put("gnu.classpath.home.url",
+                           "file://"
+                           + defaultProperties.get("gnu.classpath.home")
+                           + "/lib");
+
+    // Set short name if not already set.
+    if (defaultProperties.get("gnu.classpath.vm.shortname") == null)
+      {
+       String value = defaultProperties.getProperty("java.vm.name");
+       int index = value.lastIndexOf(' ');
+       if (index != -1)
+         value = value.substring(index + 1);
+       defaultProperties.put("gnu.classpath.vm.shortname", value);
+      }
+
+    // Network properties
+    if (defaultProperties.get("http.agent") == null)
+      {
+       String userAgent = ("gnu-classpath/"
+                           + defaultProperties.getProperty("gnu.classpath.version")
+                           + " ("
+                           + defaultProperties.getProperty("gnu.classpath.vm.shortname")
+                           + "/"
+                           + defaultProperties.getProperty("java.vm.version")
+                           + ")");
+        defaultProperties.put("http.agent", userAgent);
+      }
+
+    defaultProperties.put("gnu.cpu.endian",
+                         isWordsBigEndian() ? "big" : "little");
+
+    // XXX FIXME - Temp hack for old systems that set the wrong property
+    if (defaultProperties.get("java.io.tmpdir") == null)
+      defaultProperties.put("java.io.tmpdir",
+                            defaultProperties.get("java.tmpdir"));
+
+    // Note that we use clone here and not new.  Some programs assume
+    // that the system properties do not have a parent.
+    properties = (Properties) defaultProperties.clone();
+  }
+
+  public static String getProperty(String name)
+  {
+    return properties.getProperty(name);
+  }
+
+  public static String getProperty(String name, String defaultValue)
+  {
+    return properties.getProperty(name, defaultValue);
+  }
+
+  public static String setProperty(String name, String value)
+  {
+    return (String) properties.setProperty(name, value);
+  }
+
+  public static Properties getProperties()
+  {
+    return properties;
+  }
+
+  public static void setProperties(Properties properties)
+  {
+    if (properties == null)
+      {
+        // Note that we use clone here and not new.  Some programs
+        // assume that the system properties do not have a parent.
+        properties = (Properties)defaultProperties.clone();
+      }
+
+    SystemProperties.properties = properties;
+  }
+
+  /**
+   * Detect big-endian systems.
+   *
+   * @return true if the system is big-endian.
+   */
+  private static native boolean isWordsBigEndian();
+}
diff --git a/libjava/gnu/classpath/natSystemProperties.cc b/libjava/gnu/classpath/natSystemProperties.cc
new file mode 100644 (file)
index 0000000..d4f6109
--- /dev/null
@@ -0,0 +1,390 @@
+// natSystemProperties.cc - Implementation of native side of
+// SystemProperties class.
+
+/* Copyright (C) 2005  Free Software Foundation
+
+   This file is part of libgcj.
+
+This software is copyrighted work licensed under the terms of the
+Libgcj License.  Please consult the file "LIBGCJ_LICENSE" for
+details.  */
+
+#include <config.h>
+#include <platform.h>
+
+#include <stdlib.h>
+#include <errno.h>
+
+#ifdef HAVE_PWD_H
+#include <pwd.h>
+#endif
+
+#ifdef HAVE_UNAME
+#include <sys/utsname.h>
+#endif
+
+#ifdef HAVE_LOCALE_H
+#include <locale.h>
+#endif
+
+#ifdef HAVE_LANGINFO_H
+#include <langinfo.h>
+#endif
+
+#include <gcj/cni.h>
+#include <jvm.h>
+#include <java-props.h>
+#include <gnu/classpath/SystemProperties.h>
+#include <java/lang/String.h>
+#include <jni.h>
+
+#ifdef USE_LTDL
+#include <ltdl.h>
+
+void
+_Jv_SetDLLSearchPath (const char *path)
+{
+  lt_dlsetsearchpath (path);
+}
+
+#else
+
+void
+_Jv_SetDLLSearchPath (const char *)
+{
+  // Nothing.
+}
+
+#endif /* USE_LTDL */
+
+#if ! defined (DEFAULT_FILE_ENCODING) && defined (HAVE_ICONV) \
+    && defined (HAVE_NL_LANGINFO)
+
+static char *
+file_encoding ()
+{
+  setlocale (LC_CTYPE, "");
+  char *e = nl_langinfo (CODESET);
+  if (e == NULL || *e == '\0')
+    e = "8859_1";
+  return e;
+}
+
+#define DEFAULT_FILE_ENCODING file_encoding ()
+
+#endif
+
+#ifndef DEFAULT_FILE_ENCODING
+#define DEFAULT_FILE_ENCODING "8859_1"
+#endif
+
+static char *default_file_encoding = DEFAULT_FILE_ENCODING;
+
+#if HAVE_GETPWUID_R
+/* Use overload resolution to find out the signature of getpwuid_r.  */
+
+  /* This is Posix getpwuid_r.  */
+template <typename T_uid, typename T_passwd, typename T_buf, typename T_len>
+static inline int
+getpwuid_adaptor(int (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
+                                  T_buf *buf_r, T_len len_r,
+                                  T_passwd **pwd_entry_ptr),
+                uid_t user_id, struct passwd *pwd_r,
+                char *buf_r, size_t len_r, struct passwd **pwd_entry)
+{
+  return getpwuid_r (user_id, pwd_r, buf_r, len_r, pwd_entry);
+}
+
+/* This is used on HPUX 10.20 */
+template <typename T_uid, typename T_passwd, typename T_buf, typename T_len>
+static inline int
+getpwuid_adaptor(int (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
+                                  T_buf *buf_r, T_len len_r),
+                uid_t user_id, struct passwd *pwd_r,
+                char *buf_r, size_t len_r, struct passwd **pwd_entry)
+{
+  return getpwuid_r (user_id, pwd_r, buf_r, len_r);
+}
+
+/* This is used on IRIX 5.2.  */
+template <typename T_uid, typename T_passwd, typename T_buf, typename T_len>
+static inline int
+getpwuid_adaptor(T_passwd * (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
+                                         T_buf *buf_r, T_len len_r),
+                uid_t user_id, struct passwd *pwd_r,
+                char *buf_r, size_t len_r, struct passwd **pwd_entry)
+{
+  *pwd_entry = getpwuid_r (user_id, pwd_r, buf_r, len_r);
+  return (*pwd_entry == NULL) ? errno : 0;
+}
+#endif
+
+void
+gnu::classpath::SystemProperties::insertSystemProperties (java::util::Properties *newprops)
+{
+  // A convenience define.
+#define SET(Prop,Val) \
+       newprops->put(JvNewStringLatin1 (Prop), JvNewStringLatin1 (Val))
+
+  // A mixture of the Java Product Versioning Specification
+  // (introduced in 1.2), and earlier versioning properties.  Some
+  // programs rely on seeing values that they expect, so we claim to
+  // be a 1.4-ish VM for their sake.
+  SET ("java.version", JV_VERSION);
+  SET ("java.runtime.version", JV_VERSION);
+  SET ("java.vendor", "Free Software Foundation, Inc.");
+  SET ("java.vendor.url", "http://gcc.gnu.org/java/");
+  SET ("java.class.version", "46.0");
+  SET ("java.vm.specification.version", "1.0");
+  SET ("java.vm.specification.name", "Java(tm) Virtual Machine Specification");
+  SET ("java.vm.specification.vendor", "Sun Microsystems Inc.");
+  SET ("java.vm.version", __VERSION__);
+  SET ("java.vm.vendor", "Free Software Foundation, Inc.");
+  SET ("java.vm.name", "GNU libgcj");
+  SET ("java.specification.version", JV_API_VERSION);
+  SET ("java.specification.name", "Java(tm) Platform API Specification");
+  SET ("java.specification.vendor", "Sun Microsystems Inc.");
+
+  char value[100];
+#define NAME "GNU libgcj "
+  strcpy (value, NAME);
+  strncpy (value + sizeof (NAME) - 1, __VERSION__,
+          sizeof(value) - sizeof(NAME));
+  value[sizeof (value) - 1] = '\0';
+  jstring version = JvNewStringLatin1 (value);
+  newprops->put (JvNewStringLatin1 ("java.fullversion"), version);
+  newprops->put (JvNewStringLatin1 ("java.vm.info"), version);
+
+  // This definition is rather arbitrary: we choose $(prefix).  In
+  // part we do this because most people specify only --prefix and
+  // nothing else when installing gcj.  Plus, people are free to
+  // redefine `java.home' with `-D' if necessary.
+  SET ("java.home", JAVA_HOME);
+  SET ("gnu.classpath.home", PREFIX);
+  // This is set to $(libdir) because we use this to find .security
+  // files at runtime.
+  char val2[sizeof ("file://") + sizeof (LIBDIR) + 1];
+  strcpy (val2, "file://");
+  strcat (val2, LIBDIR);
+  SET ("gnu.classpath.home.url", val2);
+
+  SET ("file.encoding", default_file_encoding);
+
+#ifdef HAVE_UNAME
+  struct utsname u;
+  if (! uname (&u))
+    {
+      SET ("os.name", u.sysname);
+      SET ("os.version", u.release);
+
+      // Normalize x86 architecture names to "i386" (except on Windows, which 
+      // is handled in win32.cc).
+      if (u.machine[0] == 'i'
+         && u.machine[1] != 0
+         && u.machine[2] == '8'
+         && u.machine[3] == '6'
+         && u.machine[4] == 0)
+       SET ("os.arch", "i386");
+      else
+       SET ("os.arch", u.machine);
+    }
+  else
+    {
+      SET ("os.name", "unknown");
+      SET ("os.arch", "unknown");
+      SET ("os.version", "unknown");
+    }
+#endif /* HAVE_UNAME */
+
+#ifndef NO_GETUID
+#ifdef HAVE_PWD_H
+  uid_t user_id = getuid ();
+  struct passwd *pwd_entry;
+
+#ifdef HAVE_GETPWUID_R
+  struct passwd pwd_r;
+  size_t len_r = 200;
+  char *buf_r = (char *) _Jv_AllocBytes (len_r);
+
+  while (buf_r != NULL)
+    {
+      int r = getpwuid_adaptor (getpwuid_r, user_id, &pwd_r,
+                               buf_r, len_r, &pwd_entry);
+      if (r == 0)
+       break;
+      else if (r != ERANGE)
+       {
+         pwd_entry = NULL;
+         break;
+       }
+      len_r *= 2;
+      buf_r = (char *) _Jv_AllocBytes (len_r);
+    }
+#else
+  pwd_entry = getpwuid (user_id);
+#endif /* HAVE_GETPWUID_R */
+
+  if (pwd_entry != NULL)
+    {
+      SET ("user.name", pwd_entry->pw_name);
+      SET ("user.home", pwd_entry->pw_dir);
+    }
+#endif /* HAVE_PWD_H */
+#endif /* NO_GETUID */
+
+#ifdef HAVE_GETCWD
+#ifdef HAVE_UNISTD_H
+  /* Use getcwd to set "user.dir". */
+  int buflen = 250;
+  char *buffer = (char *) malloc (buflen);
+  while (buffer != NULL)
+    {
+      if (getcwd (buffer, buflen) != NULL)
+       {
+         SET ("user.dir", buffer);
+         break;
+       }
+      if (errno != ERANGE)
+       break;
+      buflen = 2 * buflen;
+      buffer = (char *) realloc (buffer, buflen);
+    }
+  if (buffer != NULL)
+    free (buffer);
+#endif /* HAVE_UNISTD_H */
+#endif /* HAVE_GETCWD */
+
+  // Set user locale properties based on setlocale()
+#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
+  // We let the user choose the locale.  However, since Java differs
+  // from POSIX, we arbitrarily pick LC_MESSAGES as determining the
+  // Java locale.  We can't use LC_ALL because it might return a full
+  // list of all the settings.  If we don't have LC_MESSAGES then we
+  // just default to `en_US'.
+  setlocale (LC_ALL, "");
+  char *locale = setlocale (LC_MESSAGES, "");
+  if (locale && strlen (locale) >= 2)
+    {
+      char buf[3];
+      buf[2] = '\0';
+      // copy the first two chars to user.language
+      strncpy (buf, locale, 2);
+      SET ("user.language", buf);
+      // if the next char is a '_', copy the two after that to user.region
+      locale += 2;
+      if (locale[0] == '_')
+        {
+         locale++;
+         strncpy (buf, locale, 2);
+         SET ("user.region", buf);
+        }
+    }
+  else
+#endif /* HAVE_SETLOCALE and HAVE_LC_MESSAGES */
+    {
+      SET ("user.language", "en");
+      SET ("user.region", "US");
+    }  
+
+  // The java extensions directory.
+  SET ("java.ext.dirs", JAVA_EXT_DIRS);
+
+  // The endorsed directories that libgcj knows about by default.
+  // This is a way to get other jars into the boot class loader
+  // without overriding java.endorsed.dirs.
+  SET ("gnu.gcj.runtime.endorsed.dirs", GCJ_ENDORSED_DIRS);
+
+  // The path to libgcj's boot classes
+  SET ("sun.boot.class.path", BOOT_CLASS_PATH);
+
+  // If there is a default system database, set it.
+  SET ("gnu.gcj.precompiled.db.path", LIBGCJ_DEFAULT_DATABASE);
+
+  // Set some properties according to whatever was compiled in with
+  // `-D'.  Important: after this point, the only properties that
+  // should be set are those which either the user cannot meaningfully
+  // override, or which augment whatever value the user has provided.
+  for (int i = 0; i < _Jv_Properties_Count; ++i)
+    {
+      const char *s, *p;
+      // Find the `='.
+      for (s = p = _Jv_Compiler_Properties[i]; *s && *s != '='; ++s)
+       ;
+      jstring name = JvNewStringLatin1 (p, s - p);
+      jstring val = JvNewStringLatin1 (*s == '=' ? s + 1 : s);
+      newprops->put (name, val);
+    }
+
+  // Set the system properties from the user's environment.
+#ifndef DISABLE_GETENV_PROPERTIES
+  if (_Jv_Environment_Properties)
+    {
+      size_t i = 0;
+
+      while (_Jv_Environment_Properties[i].key)
+       {
+         SET (_Jv_Environment_Properties[i].key, 
+              _Jv_Environment_Properties[i].value);
+         i++;
+       }
+    }
+#endif
+
+  // The name used to invoke this process (argv[0] in C).
+  SET ("gnu.gcj.progname", _Jv_GetSafeArg (0));
+
+  // Allow platform specific settings and overrides.
+  _Jv_platform_initProperties (newprops);
+
+  // If java.library.path is set, tell libltdl so we search the new
+  // directories as well.  FIXME: does this work properly on Windows?
+  ::java::lang::String *path = newprops->getProperty(JvNewStringLatin1("java.library.path"));
+  if (path)
+    {
+      char *val = (char *) _Jv_Malloc (JvGetStringUTFLength (path) + 1);
+      jsize total = JvGetStringUTFRegion (path, 0, path->length(), val);
+      val[total] = '\0';
+      _Jv_SetDLLSearchPath (val);
+      _Jv_Free (val);
+    }
+  else
+    {
+      // Set a value for user code to see.
+      // FIXME: JDK sets this to the actual path used, including
+      // LD_LIBRARY_PATH, etc.
+      SET ("java.library.path", "");
+    }
+
+  // If java.class.path is still not set then set it according to the
+  // CLASSPATH environment variable if given.  See gij.cc main () and
+  // prims.cc _Jv_CreateJavaVM () for all the ways this could have
+  // been set much earlier.
+  // If CLASSPATH isn't set or if the path is empty fall back to "."
+  path = newprops->getProperty(JvNewStringLatin1("java.class.path"));
+  if (!path)
+    {
+      char *classpath = getenv("CLASSPATH");
+      if (classpath && classpath[0] != 0)
+       {
+         path = JvNewStringLatin1 (classpath);
+         newprops->put(JvNewStringLatin1 ("java.class.path"), path);
+       }
+    }
+
+  if (!path || path->length() == 0)
+    SET ("java.class.path", ".");
+}
+
+jboolean
+gnu::classpath::SystemProperties::isWordsBigEndian (void)
+{
+  union
+  {
+    long lval;
+    char cval;
+  } u;
+
+  u.lval = 1;
+  return u.cval == 0;
+}
+
index 1094720..858b331 100644 (file)
@@ -1,5 +1,5 @@
 /* Runtime.java -- access to the VM process
-   Copyright (C) 1998, 2002, 2003, 2004 Free Software Foundation
+   Copyright (C) 1998, 2002, 2003, 2004, 2005 Free Software Foundation
 
 This file is part of GNU Classpath.
 
@@ -38,13 +38,14 @@ exception statement from your version. */
 
 package java.lang;
 
+import gnu.classpath.SystemProperties;
+
 import java.io.File;
 import java.io.IOException;
 import java.io.InputStream;
 import java.io.OutputStream;
 import java.util.HashSet;
 import java.util.Iterator;
-import java.util.Properties;
 import java.util.Set;
 import java.util.StringTokenizer;
 
@@ -72,47 +73,9 @@ public class Runtime
    */
   static SecurityManager securityManager;
 
-  /**
-   * The default properties defined by the system. This is likewise located
-   * here instead of in Runtime, to avoid bootstrap issues; it is package
-   * visible to avoid overhead in java.lang. Note that System will add a
-   * few more properties to this collection, but that after that, it is
-   * treated as read-only.
-   *
-   * No matter what class you start initialization with, it defers to the
-   * superclass, therefore Object.&lt;clinit&gt; will be the first Java code
-   * executed. From there, the bootstrap sequence, up to the point that
-   * native libraries are loaded (as of March 24, when I traced this
-   * manually) is as follows:
-   *
-   * Object.&lt;clinit&gt; uses a String literal, possibly triggering initialization
-   *  String.&lt;clinit&gt; calls WeakHashMap.&lt;init&gt;, triggering initialization
-   *   AbstractMap, WeakHashMap, WeakHashMap$1 have no dependencies
-   *  String.&lt;clinit&gt; calls CaseInsensitiveComparator.&lt;init&gt;, triggering
-   *      initialization
-   *   CaseInsensitiveComparator has no dependencies
-   * Object.&lt;clinit&gt; calls System.loadLibrary, triggering initialization
-   *  System.&lt;clinit&gt; calls System.loadLibrary
-   *  System.loadLibrary calls Runtime.getRuntime, triggering initialization
-   *   Runtime.&lt;clinit&gt; calls Properties.&lt;init&gt;, triggering initialization
-   *    Dictionary, Hashtable, and Properties have no dependencies
-   *   Runtime.&lt;clinit&gt; calls VMRuntime.insertSystemProperties, triggering
-   *      initialization of VMRuntime; the VM must make sure that there are
-   *      not any harmful dependencies
-   *   Runtime.&lt;clinit&gt; calls Runtime.&lt;init&gt;
-   *    Runtime.&lt;init&gt; calls StringTokenizer.&lt;init&gt;, triggering initialization
-   *     StringTokenizer has no dependencies
-   *  System.loadLibrary calls Runtime.loadLibrary
-   *   Runtime.loadLibrary should be able to load the library, although it
-   *       will probably set off another string of initializations from
-   *       ClassLoader first
-   */
-  static Properties defaultProperties = new Properties();
-
   static
   {
     init();
-    insertSystemProperties(defaultProperties);
   }
 
   /**
@@ -134,8 +97,7 @@ public class Runtime
   private boolean finalizeOnExit;
 
   /**
-   * The one and only runtime instance. This must appear after the default
-   * properties have been initialized by the VM.
+   * The one and only runtime instance.
    */
   private static final Runtime current = new Runtime();
 
@@ -146,12 +108,11 @@ public class Runtime
   {
     if (current != null)
       throw new InternalError("Attempt to recreate Runtime");
-
+    
     // We don't use libpath in the libgcj implementation.  We still
     // set it to something to allow the various synchronizations to
     // work.
     libpath = new String[0];
-
   }
 
   /**
@@ -322,15 +283,15 @@ public class Runtime
     if (sm != null)
       sm.checkPermission(new RuntimePermission("shutdownHooks"));
     if (hook.isAlive() || hook.getThreadGroup() == null)
-      throw new IllegalArgumentException();
+      throw new IllegalArgumentException("The hook thread " + hook + " must not have been already run or started");
     synchronized (libpath)
       {
         if (exitSequence != null)
-          throw new IllegalStateException();
+          throw new IllegalStateException("The Virtual Machine is exiting. It is not possible anymore to add any hooks");
         if (shutdownHooks == null)
           shutdownHooks = new HashSet(); // Lazy initialization.
         if (! shutdownHooks.add(hook))
-          throw new IllegalArgumentException();
+          throw new IllegalArgumentException(hook.toString() + " had already been inserted");
       }
   }
 
@@ -740,48 +701,4 @@ public class Runtime
    */
   native Process execInternal(String[] cmd, String[] env, File dir)
     throws IOException;
-    
-
-  /**
-   * Get the system properties. This is done here, instead of in System,
-   * because of the bootstrap sequence. Note that the native code should
-   * not try to use the Java I/O classes yet, as they rely on the properties
-   * already existing. The only safe method to use to insert these default
-   * system properties is {@link Properties#setProperty(String, String)}.
-   *
-   * <p>These properties MUST include:
-   * <dl>
-   * <dt>java.version         <dd>Java version number
-   * <dt>java.vendor          <dd>Java vendor specific string
-   * <dt>java.vendor.url      <dd>Java vendor URL
-   * <dt>java.home            <dd>Java installation directory
-   * <dt>java.vm.specification.version <dd>VM Spec version
-   * <dt>java.vm.specification.vendor  <dd>VM Spec vendor
-   * <dt>java.vm.specification.name    <dd>VM Spec name
-   * <dt>java.vm.version      <dd>VM implementation version
-   * <dt>java.vm.vendor       <dd>VM implementation vendor
-   * <dt>java.vm.name         <dd>VM implementation name
-   * <dt>java.specification.version    <dd>Java Runtime Environment version
-   * <dt>java.specification.vendor     <dd>Java Runtime Environment vendor
-   * <dt>java.specification.name       <dd>Java Runtime Environment name
-   * <dt>java.class.version   <dd>Java class version number
-   * <dt>java.class.path      <dd>Java classpath
-   * <dt>java.library.path    <dd>Path for finding Java libraries
-   * <dt>java.io.tmpdir       <dd>Default temp file path
-   * <dt>java.compiler        <dd>Name of JIT to use
-   * <dt>java.ext.dirs        <dd>Java extension path
-   * <dt>os.name              <dd>Operating System Name
-   * <dt>os.arch              <dd>Operating System Architecture
-   * <dt>os.version           <dd>Operating System Version
-   * <dt>file.separator       <dd>File separator ("/" on Unix)
-   * <dt>path.separator       <dd>Path separator (":" on Unix)
-   * <dt>line.separator       <dd>Line separator ("\n" on Unix)
-   * <dt>user.name            <dd>User account name
-   * <dt>user.home            <dd>User home directory
-   * <dt>user.dir             <dd>User's current working directory
-   * </dl>
-   *
-   * @param p the Properties object to insert the system properties into
-   */
-  static native void insertSystemProperties(Properties p);
 } // class Runtime
index fa02666..b621f26 100644 (file)
@@ -1,5 +1,5 @@
 /* System.java -- useful methods to interface with the system
-   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004
+   Copyright (C) 1998, 1999, 2000, 2001, 2002, 2003, 2004, 2005
    Free Software Foundation, Inc.
 
 This file is part of GNU Classpath.
@@ -39,7 +39,7 @@ exception statement from your version. */
 
 package java.lang;
 
-import gnu.classpath.Configuration;
+import gnu.classpath.SystemProperties;
 
 import java.io.BufferedInputStream;
 import java.io.BufferedOutputStream;
@@ -66,77 +66,6 @@ public final class System
   // in vm/reference/java/lang/Runtime for implications of this fact.
 
   /**
-   * Add to the default properties. The field is stored in Runtime, because
-   * of the bootstrap sequence; but this adds several useful properties to
-   * the defaults. Once the default is stabilized, it should not be modified;
-   * instead it is passed as a parent properties for fast setup of the
-   * defaults when calling <code>setProperties(null)</code>.
-   */
-  static
-  {
-    // Note that this loadLibrary() takes precedence over the one in Object,
-    // since Object.<clinit> is waiting for System.<clinit> to complete
-    // first; but loading a library twice is harmless.
-    if (Configuration.INIT_LOAD_LIBRARY)
-      loadLibrary("javalang");
-
-    Properties defaultProperties = Runtime.defaultProperties;
-
-    // Set base URL if not already set.
-    if (defaultProperties.get("gnu.classpath.home.url") == null)
-      defaultProperties.put("gnu.classpath.home.url",
-                           "file://"
-                           + defaultProperties.get("gnu.classpath.home")
-                           + "/lib");
-
-    // Set short name if not already set.
-    if (defaultProperties.get("gnu.classpath.vm.shortname") == null)
-      {
-       String value = defaultProperties.getProperty("java.vm.name");
-       int index = value.lastIndexOf(' ');
-       if (index != -1)
-         value = value.substring(index + 1);
-       defaultProperties.put("gnu.classpath.vm.shortname", value);
-      }
-
-    // Network properties
-    if (defaultProperties.get("http.agent") == null)
-      {
-       String userAgent
-         = ("gnu-classpath/"
-            + defaultProperties.getProperty("gnu.classpath.version")
-            + " ("
-            + defaultProperties.getProperty("gnu.classpath.vm.shortname")
-            + "/"
-            + defaultProperties.getProperty("java.vm.version")
-            + ")");
-       defaultProperties.put("http.agent", userAgent);
-      }
-
-    defaultProperties.put("gnu.cpu.endian",
-                         isWordsBigEndian() ? "big" : "little");
-
-    // GCJ LOCAL: Classpath sets common encoding aliases here.
-    // Since we don't (yet) have gnu.java.io.EncodingManager, these
-    // are a waste of time and just slow down system startup.
-
-    // XXX FIXME - Temp hack for old systems that set the wrong property
-    if (defaultProperties.get("java.io.tmpdir") == null)
-      defaultProperties.put("java.io.tmpdir",
-                            defaultProperties.get("java.tmpdir"));
-  }
-
-  /**
-   * Stores the current system properties. This can be modified by
-   * {@link #setProperties(Properties)}, but will never be null, because
-   * setProperties(null) sucks in the default properties.
-   */
-  // Note that we use clone here and not new.  Some programs assume
-  // that the system properties do not have a parent.
-  static Properties properties
-    = (Properties) Runtime.defaultProperties.clone();
-
-  /**
    * The standard InputStream. This is assigned at startup and starts its
    * life perfectly valid. Although it is marked final, you can change it
    * using {@link #setIn(InputStream)} through some hefty VM magic.
@@ -246,7 +175,7 @@ public final class System
    * @param sm the new SecurityManager
    * @throws SecurityException if permission is denied
    */
-  public synchronized static void setSecurityManager(SecurityManager sm)
+  public static synchronized void setSecurityManager(SecurityManager sm)
   {
     // Implementation note: the field lives in Runtime because of bootstrap
     // initialization issues. This method is synchronized so that no other
@@ -383,7 +312,7 @@ public final class System
     SecurityManager sm = Runtime.securityManager; // Be thread-safe.
     if (sm != null)
       sm.checkPropertiesAccess();
-    return properties;
+    return SystemProperties.getProperties();
   }
 
   /**
@@ -400,13 +329,7 @@ public final class System
     SecurityManager sm = Runtime.securityManager; // Be thread-safe.
     if (sm != null)
       sm.checkPropertiesAccess();
-    if (properties == null)
-      {
-       // Note that we use clone here and not new.  Some programs
-       // assume that the system properties do not have a parent.
-       properties = (Properties) Runtime.defaultProperties.clone();
-      }
-    System.properties = properties;
+    SystemProperties.setProperties(properties);
   }
 
   /**
@@ -426,7 +349,7 @@ public final class System
       sm.checkPropertyAccess(key);
     else if (key.length() == 0)
       throw new IllegalArgumentException("key can't be empty");
-    return properties.getProperty(key);
+    return SystemProperties.getProperty(key);
   }
 
   /**
@@ -445,7 +368,7 @@ public final class System
     SecurityManager sm = Runtime.securityManager; // Be thread-safe.
     if (sm != null)
       sm.checkPropertyAccess(key);
-    return properties.getProperty(key, def);
+    return SystemProperties.getProperty(key, def);
   }
 
   /**
@@ -465,17 +388,20 @@ public final class System
     SecurityManager sm = Runtime.securityManager; // Be thread-safe.
     if (sm != null)
       sm.checkPermission(new PropertyPermission(key, "write"));
-    return (String) properties.setProperty(key, value);
+    return SystemProperties.setProperty(key, value);
   }
 
   /**
    * Gets the value of an environment variable.
    *
    * @param name the name of the environment variable
-   * @return the string value of the variable
+   * @return the string value of the variable or null when the
+   *         environment variable is not defined.
    * @throws NullPointerException
    * @throws SecurityException if permission is denied
    * @since 1.5
+   * @specnote This method was deprecated in some JDK releases, but
+   *           was restored in 1.5.
    */
   public static String getenv(String name)
   {
@@ -483,7 +409,7 @@ public final class System
       throw new NullPointerException();
     SecurityManager sm = Runtime.securityManager; // Be thread-safe.
     if (sm != null)
-      sm.checkPermission(new RuntimePermission("getenv."+name));
+      sm.checkPermission(new RuntimePermission("getenv." + name));
     return getenv0(name);
   }
 
@@ -553,6 +479,10 @@ public final class System
    * check may be performed, <code>checkLink</code>. This just calls
    * <code>Runtime.getRuntime().load(filename)</code>.
    *
+   * <p>
+   * The library is loaded using the class loader associated with the
+   * class associated with the invoking method.
+   *
    * @param filename the code file to load
    * @throws SecurityException if permission is denied
    * @throws UnsatisfiedLinkError if the file cannot be loaded
@@ -568,6 +498,10 @@ public final class System
    * check may be performed, <code>checkLink</code>. This just calls
    * <code>Runtime.getRuntime().load(filename)</code>.
    *
+   * <p>
+   * The library is loaded using the class loader associated with the
+   * class associated with the invoking method.
+   *
    * @param libname the library file to load
    * @throws SecurityException if permission is denied
    * @throws UnsatisfiedLinkError if the file cannot be loaded
@@ -592,13 +526,6 @@ public final class System
   }
 
   /**
-   * Detect big-endian systems.
-   *
-   * @return true if the system is big-endian.
-   */
-  static native boolean isWordsBigEndian();
-
-  /**
    * Set {@link #in} to a new InputStream.
    *
    * @param in the new InputStream
index ad51578..d69b543 100644 (file)
@@ -37,6 +37,8 @@ exception statement from your version. */
 
 package java.lang;
 
+import gnu.classpath.SystemProperties;
+
 import java.io.PrintStream;
 import java.io.PrintWriter;
 import java.io.Serializable;
@@ -170,7 +172,7 @@ public class Throwable implements Serializable
   public Throwable(String message, Throwable cause)
   {
     this(message);
-    initCause(cause);
+    this.cause = cause;
   }
 
   /**
@@ -401,13 +403,7 @@ public class Throwable implements Serializable
    */
   private static class StaticData
   {
-    static final String nl;
-
-    static
-    {
-      // Access package private properties field to prevent Security check.
-      nl = System.properties.getProperty("line.separator");
-    }
+    static final String nl = SystemProperties.getProperty("line.separator");
   }
 
   // Create whole stack trace in a stringbuffer so we don't have to print
index affe27a..3df5cdd 100644 (file)
@@ -24,7 +24,6 @@ details.  */
 #include <gnu/gcj/runtime/FileDeleter.h>
 #include <gnu/gcj/runtime/FinalizerThread.h>
 #include <java/io/File.h>
-#include <java/util/Properties.h>
 #include <java/util/TimeZone.h>
 #include <java/lang/StringBuffer.h>
 #include <java/lang/Process.h>
@@ -38,10 +37,6 @@ details.  */
 #endif
 #include <errno.h>
 
-#ifdef HAVE_UNAME
-#include <sys/utsname.h>
-#endif
-
 #ifdef HAVE_LOCALE_H
 #include <locale.h>
 #endif
@@ -83,12 +78,6 @@ _Jv_FindSymbolInExecutable (const char *symname)
   return data.result;
 }
 
-void
-_Jv_SetDLLSearchPath (const char *path)
-{
-  lt_dlsetsearchpath (path);
-}
-
 #else
 
 void *
@@ -97,12 +86,6 @@ _Jv_FindSymbolInExecutable (const char *)
   return NULL;
 }
 
-void
-_Jv_SetDLLSearchPath (const char *)
-{
-  // Nothing.
-}
-
 #endif /* USE_LTDL */
 
 \f
@@ -296,324 +279,6 @@ java::lang::Runtime::traceMethodCalls (jboolean)
   // Do nothing.
 }
 
-#if ! defined (DEFAULT_FILE_ENCODING) && defined (HAVE_ICONV) \
-    && defined (HAVE_NL_LANGINFO)
-
-static char *
-file_encoding ()
-{
-  setlocale (LC_CTYPE, "");
-  char *e = nl_langinfo (CODESET);
-  if (e == NULL || *e == '\0')
-    e = "8859_1";
-  return e;
-}
-
-#define DEFAULT_FILE_ENCODING file_encoding ()
-
-#endif
-
-#ifndef DEFAULT_FILE_ENCODING
-#define DEFAULT_FILE_ENCODING "8859_1"
-#endif
-
-static char *default_file_encoding = DEFAULT_FILE_ENCODING;
-
-#if HAVE_GETPWUID_R
-/* Use overload resolution to find out the signature of getpwuid_r.  */
-
-  /* This is Posix getpwuid_r.  */
-template <typename T_uid, typename T_passwd, typename T_buf, typename T_len>
-static inline int
-getpwuid_adaptor(int (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
-                                  T_buf *buf_r, T_len len_r,
-                                  T_passwd **pwd_entry_ptr),
-                uid_t user_id, struct passwd *pwd_r,
-                char *buf_r, size_t len_r, struct passwd **pwd_entry)
-{
-  return getpwuid_r (user_id, pwd_r, buf_r, len_r, pwd_entry);
-}
-
-/* This is used on HPUX 10.20 */
-template <typename T_uid, typename T_passwd, typename T_buf, typename T_len>
-static inline int
-getpwuid_adaptor(int (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
-                                  T_buf *buf_r, T_len len_r),
-                uid_t user_id, struct passwd *pwd_r,
-                char *buf_r, size_t len_r, struct passwd **pwd_entry)
-{
-  return getpwuid_r (user_id, pwd_r, buf_r, len_r);
-}
-
-/* This is used on IRIX 5.2.  */
-template <typename T_uid, typename T_passwd, typename T_buf, typename T_len>
-static inline int
-getpwuid_adaptor(T_passwd * (*getpwuid_r)(T_uid user_id, T_passwd *pwd_r,
-                                         T_buf *buf_r, T_len len_r),
-                uid_t user_id, struct passwd *pwd_r,
-                char *buf_r, size_t len_r, struct passwd **pwd_entry)
-{
-  *pwd_entry = getpwuid_r (user_id, pwd_r, buf_r, len_r);
-  return (*pwd_entry == NULL) ? errno : 0;
-}
-#endif
-
-void
-java::lang::Runtime::insertSystemProperties (java::util::Properties *newprops)
-{
-  // A convenience define.
-#define SET(Prop,Val) \
-       newprops->put(JvNewStringLatin1 (Prop), JvNewStringLatin1 (Val))
-
-  // A mixture of the Java Product Versioning Specification
-  // (introduced in 1.2), and earlier versioning properties.  Some
-  // programs rely on seeing values that they expect, so we claim to
-  // be a 1.4-ish VM for their sake.
-  SET ("java.version", JV_VERSION);
-  SET ("java.runtime.version", JV_VERSION);
-  SET ("java.vendor", "Free Software Foundation, Inc.");
-  SET ("java.vendor.url", "http://gcc.gnu.org/java/");
-  SET ("java.class.version", "46.0");
-  SET ("java.vm.specification.version", "1.0");
-  SET ("java.vm.specification.name", "Java(tm) Virtual Machine Specification");
-  SET ("java.vm.specification.vendor", "Sun Microsystems Inc.");
-  SET ("java.vm.version", __VERSION__);
-  SET ("java.vm.vendor", "Free Software Foundation, Inc.");
-  SET ("java.vm.name", "GNU libgcj");
-  SET ("java.specification.version", JV_API_VERSION);
-  SET ("java.specification.name", "Java(tm) Platform API Specification");
-  SET ("java.specification.vendor", "Sun Microsystems Inc.");
-
-  char value[100];
-#define NAME "GNU libgcj "
-  strcpy (value, NAME);
-  strncpy (value + sizeof (NAME) - 1, __VERSION__,
-          sizeof(value) - sizeof(NAME));
-  value[sizeof (value) - 1] = '\0';
-  jstring version = JvNewStringLatin1 (value);
-  newprops->put (JvNewStringLatin1 ("java.fullversion"), version);
-  newprops->put (JvNewStringLatin1 ("java.vm.info"), version);
-
-  // This definition is rather arbitrary: we choose $(prefix).  In
-  // part we do this because most people specify only --prefix and
-  // nothing else when installing gcj.  Plus, people are free to
-  // redefine `java.home' with `-D' if necessary.
-  SET ("java.home", JAVA_HOME);
-  SET ("gnu.classpath.home", PREFIX);
-  // This is set to $(libdir) because we use this to find .security
-  // files at runtime.
-  char val2[sizeof ("file://") + sizeof (LIBDIR) + 1];
-  strcpy (val2, "file://");
-  strcat (val2, LIBDIR);
-  SET ("gnu.classpath.home.url", val2);
-
-  SET ("file.encoding", default_file_encoding);
-
-#ifdef HAVE_UNAME
-  struct utsname u;
-  if (! uname (&u))
-    {
-      SET ("os.name", u.sysname);
-      SET ("os.version", u.release);
-
-      // Normalize x86 architecture names to "i386" (except on Windows, which 
-      // is handled in win32.cc).
-      if (u.machine[0] == 'i'
-         && u.machine[1] != 0
-         && u.machine[2] == '8'
-         && u.machine[3] == '6'
-         && u.machine[4] == 0)
-       SET ("os.arch", "i386");
-      else
-       SET ("os.arch", u.machine);
-    }
-  else
-    {
-      SET ("os.name", "unknown");
-      SET ("os.arch", "unknown");
-      SET ("os.version", "unknown");
-    }
-#endif /* HAVE_UNAME */
-
-#ifndef NO_GETUID
-#ifdef HAVE_PWD_H
-  uid_t user_id = getuid ();
-  struct passwd *pwd_entry;
-
-#ifdef HAVE_GETPWUID_R
-  struct passwd pwd_r;
-  size_t len_r = 200;
-  char *buf_r = (char *) _Jv_AllocBytes (len_r);
-
-  while (buf_r != NULL)
-    {
-      int r = getpwuid_adaptor (getpwuid_r, user_id, &pwd_r,
-                               buf_r, len_r, &pwd_entry);
-      if (r == 0)
-       break;
-      else if (r != ERANGE)
-       {
-         pwd_entry = NULL;
-         break;
-       }
-      len_r *= 2;
-      buf_r = (char *) _Jv_AllocBytes (len_r);
-    }
-#else
-  pwd_entry = getpwuid (user_id);
-#endif /* HAVE_GETPWUID_R */
-
-  if (pwd_entry != NULL)
-    {
-      SET ("user.name", pwd_entry->pw_name);
-      SET ("user.home", pwd_entry->pw_dir);
-    }
-#endif /* HAVE_PWD_H */
-#endif /* NO_GETUID */
-
-#ifdef HAVE_GETCWD
-#ifdef HAVE_UNISTD_H
-  /* Use getcwd to set "user.dir". */
-  int buflen = 250;
-  char *buffer = (char *) malloc (buflen);
-  while (buffer != NULL)
-    {
-      if (getcwd (buffer, buflen) != NULL)
-       {
-         SET ("user.dir", buffer);
-         break;
-       }
-      if (errno != ERANGE)
-       break;
-      buflen = 2 * buflen;
-      buffer = (char *) realloc (buffer, buflen);
-    }
-  if (buffer != NULL)
-    free (buffer);
-#endif /* HAVE_UNISTD_H */
-#endif /* HAVE_GETCWD */
-
-  // Set user locale properties based on setlocale()
-#if defined (HAVE_SETLOCALE) && defined (HAVE_LC_MESSAGES)
-  // We let the user choose the locale.  However, since Java differs
-  // from POSIX, we arbitrarily pick LC_MESSAGES as determining the
-  // Java locale.  We can't use LC_ALL because it might return a full
-  // list of all the settings.  If we don't have LC_MESSAGES then we
-  // just default to `en_US'.
-  setlocale (LC_ALL, "");
-  char *locale = setlocale (LC_MESSAGES, "");
-  if (locale && strlen (locale) >= 2)
-    {
-      char buf[3];
-      buf[2] = '\0';
-      // copy the first two chars to user.language
-      strncpy (buf, locale, 2);
-      SET ("user.language", buf);
-      // if the next char is a '_', copy the two after that to user.region
-      locale += 2;
-      if (locale[0] == '_')
-        {
-         locale++;
-         strncpy (buf, locale, 2);
-         SET ("user.region", buf);
-        }
-    }
-  else
-#endif /* HAVE_SETLOCALE and HAVE_LC_MESSAGES */
-    {
-      SET ("user.language", "en");
-      SET ("user.region", "US");
-    }  
-
-  // The java extensions directory.
-  SET ("java.ext.dirs", JAVA_EXT_DIRS);
-
-  // The endorsed directories that libgcj knows about by default.
-  // This is a way to get other jars into the boot class loader
-  // without overriding java.endorsed.dirs.
-  SET ("gnu.gcj.runtime.endorsed.dirs", GCJ_ENDORSED_DIRS);
-
-  // The path to libgcj's boot classes
-  SET ("sun.boot.class.path", BOOT_CLASS_PATH);
-
-  // If there is a default system database, set it.
-  SET ("gnu.gcj.precompiled.db.path", LIBGCJ_DEFAULT_DATABASE);
-
-  // Set some properties according to whatever was compiled in with
-  // `-D'.  Important: after this point, the only properties that
-  // should be set are those which either the user cannot meaningfully
-  // override, or which augment whatever value the user has provided.
-  for (int i = 0; i < _Jv_Properties_Count; ++i)
-    {
-      const char *s, *p;
-      // Find the `='.
-      for (s = p = _Jv_Compiler_Properties[i]; *s && *s != '='; ++s)
-       ;
-      jstring name = JvNewStringLatin1 (p, s - p);
-      jstring val = JvNewStringLatin1 (*s == '=' ? s + 1 : s);
-      newprops->put (name, val);
-    }
-
-  // Set the system properties from the user's environment.
-#ifndef DISABLE_GETENV_PROPERTIES
-  if (_Jv_Environment_Properties)
-    {
-      size_t i = 0;
-
-      while (_Jv_Environment_Properties[i].key)
-       {
-         SET (_Jv_Environment_Properties[i].key, 
-              _Jv_Environment_Properties[i].value);
-         i++;
-       }
-    }
-#endif
-
-  // The name used to invoke this process (argv[0] in C).
-  SET ("gnu.gcj.progname", _Jv_GetSafeArg (0));
-
-  // Allow platform specific settings and overrides.
-  _Jv_platform_initProperties (newprops);
-
-  // If java.library.path is set, tell libltdl so we search the new
-  // directories as well.  FIXME: does this work properly on Windows?
-  String *path = newprops->getProperty(JvNewStringLatin1("java.library.path"));
-  if (path)
-    {
-      char *val = (char *) _Jv_Malloc (JvGetStringUTFLength (path) + 1);
-      jsize total = JvGetStringUTFRegion (path, 0, path->length(), val);
-      val[total] = '\0';
-      _Jv_SetDLLSearchPath (val);
-      _Jv_Free (val);
-    }
-  else
-    {
-      // Set a value for user code to see.
-      // FIXME: JDK sets this to the actual path used, including
-      // LD_LIBRARY_PATH, etc.
-      SET ("java.library.path", "");
-    }
-
-  // If java.class.path is still not set then set it according to the
-  // CLASSPATH environment variable if given.  See gij.cc main () and
-  // prims.cc _Jv_CreateJavaVM () for all the ways this could have
-  // been set much earlier.
-  // If CLASSPATH isn't set or if the path is empty fall back to "."
-  path = newprops->getProperty(JvNewStringLatin1("java.class.path"));
-  if (!path)
-    {
-      char *classpath = getenv("CLASSPATH");
-      if (classpath && classpath[0] != 0)
-       {
-         path = JvNewStringLatin1 (classpath);
-         newprops->put(JvNewStringLatin1 ("java.class.path"), path);
-       }
-    }
-
-  if (!path || path->length() == 0)
-    SET ("java.class.path", ".");
-}
-
 java::lang::Process *
 java::lang::Runtime::execInternal (jstringArray cmd,
                                   jstringArray env,
index a9dca32..0a4c8b9 100644 (file)
@@ -130,19 +130,6 @@ java::lang::System::identityHashCode (jobject obj)
   return _Jv_HashCode (obj);
 }
 
-jboolean
-java::lang::System::isWordsBigEndian (void)
-{
-  union
-  {
-    long lval;
-    char cval;
-  } u;
-
-  u.lval = 1;
-  return u.cval == 0;
-}
-
 jstring
 java::lang::System::getenv0 (jstring name)
 {