aboutsummaryrefslogtreecommitdiff
path: root/libjava/java
diff options
context:
space:
mode:
authorMichael Koch <mkoch@gcc.gnu.org>2005-04-25 19:48:35 +0000
committerMichael Koch <mkoch@gcc.gnu.org>2005-04-25 19:48:35 +0000
commitee141b882274c83730b641028543aaa2ca59dcc4 (patch)
treeb5b9489b56407d7dd7458dfb66e0c427e65d010b /libjava/java
parent8efae6bbfa04f662589bbfc64dbbe68935f973d2 (diff)
downloadgcc-ee141b882274c83730b641028543aaa2ca59dcc4.zip
gcc-ee141b882274c83730b641028543aaa2ca59dcc4.tar.gz
gcc-ee141b882274c83730b641028543aaa2ca59dcc4.tar.bz2
[multiple changes]
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. From-SVN: r98734
Diffstat (limited to 'libjava/java')
-rw-r--r--libjava/java/lang/Runtime.java99
-rw-r--r--libjava/java/lang/System.java115
-rw-r--r--libjava/java/lang/Throwable.java12
-rw-r--r--libjava/java/lang/natRuntime.cc335
-rw-r--r--libjava/java/lang/natSystem.cc13
5 files changed, 33 insertions, 541 deletions
diff --git a/libjava/java/lang/Runtime.java b/libjava/java/lang/Runtime.java
index 1094720..858b331 100644
--- a/libjava/java/lang/Runtime.java
+++ b/libjava/java/lang/Runtime.java
@@ -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
diff --git a/libjava/java/lang/System.java b/libjava/java/lang/System.java
index fa02666..b621f26 100644
--- a/libjava/java/lang/System.java
+++ b/libjava/java/lang/System.java
@@ -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
diff --git a/libjava/java/lang/Throwable.java b/libjava/java/lang/Throwable.java
index ad51578..d69b543 100644
--- a/libjava/java/lang/Throwable.java
+++ b/libjava/java/lang/Throwable.java
@@ -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
diff --git a/libjava/java/lang/natRuntime.cc b/libjava/java/lang/natRuntime.cc
index affe27a..3df5cdd 100644
--- a/libjava/java/lang/natRuntime.cc
+++ b/libjava/java/lang/natRuntime.cc
@@ -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 */
@@ -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,
diff --git a/libjava/java/lang/natSystem.cc b/libjava/java/lang/natSystem.cc
index a9dca32..0a4c8b9 100644
--- a/libjava/java/lang/natSystem.cc
+++ b/libjava/java/lang/natSystem.cc
@@ -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)
{