diff options
author | Michael Koch <mkoch@gcc.gnu.org> | 2005-04-25 19:48:35 +0000 |
---|---|---|
committer | Michael Koch <mkoch@gcc.gnu.org> | 2005-04-25 19:48:35 +0000 |
commit | ee141b882274c83730b641028543aaa2ca59dcc4 (patch) | |
tree | b5b9489b56407d7dd7458dfb66e0c427e65d010b /libjava/java | |
parent | 8efae6bbfa04f662589bbfc64dbbe68935f973d2 (diff) | |
download | gcc-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.java | 99 | ||||
-rw-r--r-- | libjava/java/lang/System.java | 115 | ||||
-rw-r--r-- | libjava/java/lang/Throwable.java | 12 | ||||
-rw-r--r-- | libjava/java/lang/natRuntime.cc | 335 | ||||
-rw-r--r-- | libjava/java/lang/natSystem.cc | 13 |
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.<clinit> 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.<clinit> uses a String literal, possibly triggering initialization - * String.<clinit> calls WeakHashMap.<init>, triggering initialization - * AbstractMap, WeakHashMap, WeakHashMap$1 have no dependencies - * String.<clinit> calls CaseInsensitiveComparator.<init>, triggering - * initialization - * CaseInsensitiveComparator has no dependencies - * Object.<clinit> calls System.loadLibrary, triggering initialization - * System.<clinit> calls System.loadLibrary - * System.loadLibrary calls Runtime.getRuntime, triggering initialization - * Runtime.<clinit> calls Properties.<init>, triggering initialization - * Dictionary, Hashtable, and Properties have no dependencies - * Runtime.<clinit> calls VMRuntime.insertSystemProperties, triggering - * initialization of VMRuntime; the VM must make sure that there are - * not any harmful dependencies - * Runtime.<clinit> calls Runtime.<init> - * Runtime.<init> calls StringTokenizer.<init>, 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) { |