Skip to content

Commit

Permalink
Fixes #1410
Browse files Browse the repository at this point in the history
  • Loading branch information
mkarg committed Jan 26, 2022
1 parent f552670 commit 3d69361
Show file tree
Hide file tree
Showing 2 changed files with 20 additions and 3 deletions.
Expand Up @@ -719,6 +719,9 @@ public static final SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX[] getLogicalProcesso
return procInfoList.toArray(new SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX[0]);
}

// Prevents useless heap pollution
private static final String[] EMPTY_STRING_ARRAY = new String[0];

/**
* Retrieves all the keys and values for the specified section of an initialization file.
*
Expand All @@ -739,7 +742,12 @@ public static final SYSTEM_LOGICAL_PROCESSOR_INFORMATION_EX[] getLogicalProcesso
public static final String[] getPrivateProfileSection(final String appName, final String fileName) {
final char buffer[] = new char[32768]; // Maximum section size according to MSDN (http://msdn.microsoft.com/en-us/library/windows/desktop/ms724348(v=vs.85).aspx)
if (Kernel32.INSTANCE.GetPrivateProfileSection(appName, buffer, new DWORD(buffer.length), fileName).intValue() == 0) {
throw new Win32Exception(Kernel32.INSTANCE.GetLastError());
final int lastError = Kernel32.INSTANCE.GetLastError();
if (lastError == Kernel32.ERROR_SUCCESS) {
return EMPTY_STRING_ARRAY;
} else {
throw new Win32Exception(lastError);
}
}
return new String(buffer).split("\0");
}
Expand Down
Expand Up @@ -244,9 +244,18 @@ public final void testGetPrivateProfileSection() throws IOException {
final File tmp = File.createTempFile("testGetPrivateProfileSection", ".ini");
tmp.deleteOnExit();

final PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(tmp)));
final PrintWriter writer0 = new PrintWriter(new BufferedWriter(new FileWriter(tmp)));
try {
writer0.println("[X]");
} finally {
writer0.close();
}

final String[] lines0 = Kernel32Util.getPrivateProfileSection("X", tmp.getCanonicalPath());
assertEquals(lines0.length, 0);

final PrintWriter writer = new PrintWriter(new BufferedWriter(new FileWriter(tmp, true)));
try {
writer.println("[X]");
writer.println("A=1");
writer.println("foo=bar");
} finally {
Expand Down

0 comments on commit 3d69361

Please sign in to comment.