aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndrew Haley <aph@redhat.com>2004-06-14 14:34:21 +0000
committerAndrew Haley <aph@gcc.gnu.org>2004-06-14 14:34:21 +0000
commitdf94fa14b99a0911478d84280f95aa35482172e9 (patch)
treef2966e59c9f3c09ec6484a7f905e07de8c1416ae
parent50431bc4280a683141da4c51375ef07636083b7b (diff)
downloadgcc-df94fa14b99a0911478d84280f95aa35482172e9.zip
gcc-df94fa14b99a0911478d84280f95aa35482172e9.tar.gz
gcc-df94fa14b99a0911478d84280f95aa35482172e9.tar.bz2
System.java: (getenv0): New method.
2004-06-14 Andrew Haley <aph@redhat.com> * java/lang/System.java: (getenv0): New method. (getenv): Add security check. Do the right thing. * java/lang/natSystem.cc (getenv0): New method. From-SVN: r83107
-rw-r--r--libjava/ChangeLog6
-rw-r--r--libjava/java/lang/System.java25
-rw-r--r--libjava/java/lang/natSystem.cc13
3 files changed, 37 insertions, 7 deletions
diff --git a/libjava/ChangeLog b/libjava/ChangeLog
index ba8a32d..8121d80 100644
--- a/libjava/ChangeLog
+++ b/libjava/ChangeLog
@@ -1,3 +1,9 @@
+2004-06-14 Andrew Haley <aph@redhat.com>
+
+ * java/lang/System.java: (getenv0): New method.
+ (getenv): Add security check. Do the right thing.
+ * java/lang/natSystem.cc (getenv0): New method.
+
2004-06-12 Mark Wielaard <mark@klomp.org>
* javax/swing/RepaintManager.java
diff --git a/libjava/java/lang/System.java b/libjava/java/lang/System.java
index 1d9805b..d752987 100644
--- a/libjava/java/lang/System.java
+++ b/libjava/java/lang/System.java
@@ -454,18 +454,22 @@ public final class System
}
/**
- * This used to get an environment variable, but following Sun's lead,
- * it now throws an Error. Use <code>getProperty</code> instead.
+ * Gets the value of an environment variable.
*
* @param name the name of the environment variable
- * @return this does not return
- * @throws Error this is not supported
- * @deprecated use {@link #getProperty(String)}; getenv is not supported
+ * @return the string value of the variable
+ * @throws NullPointerException
+ * @throws SecurityException if permission is denied
+ * @since 1.5
*/
public static String getenv(String name)
{
- throw new Error("getenv no longer supported, use properties instead: "
- + name);
+ if (name == null)
+ throw new NullPointerException();
+ SecurityManager sm = Runtime.securityManager; // Be thread-safe.
+ if (sm != null)
+ sm.checkPermission(new RuntimePermission("getenv."+name));
+ return getenv0(name);
}
/**
@@ -602,4 +606,11 @@ public final class System
* @see #setErr(PrintStream)
*/
private static native void setErr0(PrintStream err);
+
+ /**
+ * Gets the value of an environment variable.
+ *
+ * @see #getenv(String)
+ */
+ static native String getenv0(String name);
} // class System
diff --git a/libjava/java/lang/natSystem.cc b/libjava/java/lang/natSystem.cc
index 4a08bb1..ffb26a3 100644
--- a/libjava/java/lang/natSystem.cc
+++ b/libjava/java/lang/natSystem.cc
@@ -142,3 +142,16 @@ java::lang::System::isWordsBigEndian (void)
u.lval = 1;
return u.cval == 0;
}
+
+jstring
+java::lang::System::getenv0 (jstring name)
+{
+ jint len = _Jv_GetStringUTFLength (name);
+ char buf[len + 1];
+ jsize total = JvGetStringUTFRegion (name, 0, name->length(), buf);
+ buf[total] = '\0';
+ const char *value = ::getenv (buf);
+ if (value == NULL)
+ return NULL;
+ return JvNewStringLatin1 (value);
+}