src/windows/classes/java/lang/ProcessEnvironment.java
Print this page
@@ -142,10 +142,11 @@
}
public void remove() { i.remove();}
};
}
private static Map.Entry<String,String> checkedEntry (Object o) {
+ @SuppressWarnings("unchecked")
Map.Entry<String,String> e = (Map.Entry<String,String>) o;
nonNullString(e.getKey());
nonNullString(e.getValue());
return e;
}
@@ -293,11 +294,30 @@
private static native String environmentBlock();
// Only for use by ProcessImpl.start()
String toEnvironmentBlock() {
// Sort Unicode-case-insensitively by name
- List<Map.Entry<String,String>> list = new ArrayList<>(entrySet());
+ Set<Map.Entry<String,String>> entries = entrySet();
+ List<Map.Entry<String,String>> list = new ArrayList<>(entries);
+
+ // check for "SystemRoot". Needed by MSVCRT.DLL
+ // Environment variable names are case-insensitive.
+ // So, must do an iterative search.
+ boolean found = false;
+ for (Map.Entry<String,String> entry : entries) {
+ String key = entry.getKey();
+ if (key.equalsIgnoreCase("SystemRoot")) {
+ found = true;
+ break;
+ }
+ }
+ if (!found) {
+ list.add(new AbstractMap.SimpleEntry<String,String>(
+ "SystemRoot", getenv("SystemRoot"))
+ );
+ }
+
Collections.sort(list, entryComparator);
StringBuilder sb = new StringBuilder(size()*30);
for (Map.Entry<String,String> e : list)
sb.append(e.getKey())