src/windows/classes/java/lang/ProcessEnvironment.java

Print this page

        

*** 141,151 **** return new CheckedEntry(i.next()); } public void remove() { i.remove();} }; } ! private static Map.Entry<String,String> checkedEntry (Object o) { Map.Entry<String,String> e = (Map.Entry<String,String>) o; nonNullString(e.getKey()); nonNullString(e.getValue()); return e; } --- 141,151 ---- return new CheckedEntry(i.next()); } public void remove() { i.remove();} }; } ! private static Map.Entry<String,String> checkedEntry(Object o) { Map.Entry<String,String> e = (Map.Entry<String,String>) o; nonNullString(e.getKey()); nonNullString(e.getValue()); return e; }
*** 297,319 **** // Sort Unicode-case-insensitively by name List<Map.Entry<String,String>> list = new ArrayList<>(entrySet()); Collections.sort(list, entryComparator); StringBuilder sb = new StringBuilder(size()*30); ! for (Map.Entry<String,String> e : list) ! sb.append(e.getKey()) .append('=') ! .append(e.getValue()) .append('\u0000'); // Ensure double NUL termination, // even if environment is empty. if (sb.length() == 0) sb.append('\u0000'); sb.append('\u0000'); return sb.toString(); } static String toEnvironmentBlock(Map<String,String> map) { return map == null ? null : ((ProcessEnvironment)map).toEnvironmentBlock(); } } --- 297,349 ---- // Sort Unicode-case-insensitively by name List<Map.Entry<String,String>> list = new ArrayList<>(entrySet()); Collections.sort(list, entryComparator); StringBuilder sb = new StringBuilder(size()*30); ! boolean foundSysRoot = false; ! for (Map.Entry<String,String> e : list) { ! String key = e.getKey(); ! String val = e.getValue(); ! if (!foundSysRoot) { ! int cmp = key.compareToIgnoreCase("systemroot"); ! if (cmp == 0) { ! foundSysRoot = true; ! } else if (cmp > 0) { ! // SystemRoot not set, so add it here ! // must use lowercase name, to preserve sort position ! addEnv(sb, "systemroot"); ! foundSysRoot = true; ! } ! } ! sb.append(key) .append('=') ! .append(val) .append('\u0000'); + } + if (!foundSysRoot) { + // must use lowercase name, to preserve sort position + addEnv(sb, "systemroot"); + } // Ensure double NUL termination, // even if environment is empty. if (sb.length() == 0) sb.append('\u0000'); sb.append('\u0000'); return sb.toString(); } + // add the environment variable to the child, if it exists in parent + private static void addEnv(StringBuilder sb, String envName) { + String s = getenv(envName); + if (s != null) { + sb.append(envName) + .append("=") + .append(s) + .append('\u0000'); + } + } + static String toEnvironmentBlock(Map<String,String> map) { return map == null ? null : ((ProcessEnvironment)map).toEnvironmentBlock(); } }