System.java: (getenv0): New method.
authorAndrew Haley <aph@redhat.com>
Mon, 14 Jun 2004 14:34:21 +0000 (14:34 +0000)
committerAndrew Haley <aph@gcc.gnu.org>
Mon, 14 Jun 2004 14:34:21 +0000 (14:34 +0000)
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

libjava/ChangeLog
libjava/java/lang/System.java
libjava/java/lang/natSystem.cc

index ba8a32d6e5782d79ac65ad1694834d89f08642c1..8121d8060f8a24201e1cb87454e1a281fefd6f3c 100644 (file)
@@ -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
index 1d9805bc145e4bd5ca36a5709b62f0d7da4bb214..d75298718453fdf37feb7ce7cce4f21d7f00ed2d 100644 (file)
@@ -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
index 4a08bb138bf90f6a920fc5da4267cd03745cc764..ffb26a3cf80b0a7fb19fd57de637cf1b5b1d4ee3 100644 (file)
@@ -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);
+}