Hi all!

I just submitted this patch that fixes a problem in our System.getenv()
method.

It's possible to have variable in the form of:

key=value=value=value

like (from my env list):

XDM_MANAGED=method=classic

cheers,
Mario

2008-09-16  Mario Torre  <[EMAIL PROTECTED]>

    * java/lang/System.java (getenv): Fix env entries of the form
    key=value=value=value not parsed correctly. 

-- 
Mario Torre, Software Developer, http://www.jroller.com/neugens/
aicas Allerton Interworks Computer Automated Systems GmbH
Haid-und-Neu-Straße 18 * D-76131 Karlsruhe * Germany
http://www.aicas.com   * Tel: +49-721-663 968-53
pgp key: http://subkeys.pgp.net/ PGP Key ID: 80F240CF
Fingerprint: BA39 9666 94EC 8B73 27FA  FC7C 4086 63E3 80F2 40CF

USt-Id: DE216375633, Handelsregister HRB 109481, AG Mannheim
Geschäftsführer: Dr. James J. Hunt

Please, support open standards:
http://opendocumentfellowship.org/petition/
http://www.nosoftwarepatents.com/
### Eclipse Workspace Patch 1.0
#P classpath
Index: java/lang/System.java
===================================================================
RCS file: /sources/classpath/classpath/java/lang/System.java,v
retrieving revision 1.62
diff -u -r1.62 System.java
--- java/lang/System.java	7 Jan 2008 21:11:24 -0000	1.62
+++ java/lang/System.java	16 Sep 2008 19:26:17 -0000
@@ -546,20 +546,28 @@
     SecurityManager sm = SecurityManager.current; // Be thread-safe.
     if (sm != null)
       sm.checkPermission(new RuntimePermission("getenv.*"));
+
     if (environmentMap == null)
       {
-	List<String> environ = (List<String>)VMSystem.environ();
-	Map<String,String> variables = new EnvironmentMap();
-	for (String pair : environ)
-	  {
-	    String[] parts = pair.split("=");
-	    if (parts.length == 2)
-	      variables.put(parts[0], parts[1]);
-	    else
-	      variables.put(parts[0], "");
-	  }
-	environmentMap = Collections.unmodifiableMap(variables);
+        Map<String, String> _map = new HashMap();
+        List<String> environ = (List<String>)VMSystem.environ();
+        for (String envEntry : environ)
+          {
+            // avoid broken and null entries
+            if (envEntry != null && !envEntry.endsWith("="))
+              {
+                // it's perfectly legal that some entries may be in the form
+                // key=value=value=value
+                int equalSignIndex = envEntry.indexOf('=');            
+                String key = envEntry.substring(0, equalSignIndex);
+                String value = envEntry.substring(equalSignIndex + 1);
+                _map.put(key, value);
+              }
+          }
+        
+        environmentMap = Collections.unmodifiableMap(_map);
       }
+    
     return environmentMap;
   }
 

Reply via email to