Commit ee141b88 by Michael Koch

[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
parent 8efae6bb
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
......
......@@ -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 \
......
......@@ -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@
/* 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();
}
/* 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
/* 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
......
......@@ -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
......
......@@ -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)
{
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment