Dubious use of mkdirs() return code
-----------------------------------
Key: JCI-67
URL: https://issues.apache.org/jira/browse/JCI-67
Project: Commons JCI
Issue Type: Bug
Reporter: Sebb
Priority: Minor
FileRestoreStore.java uses mkdirs() as follows:
{code}
final File parent = file.getParentFile();
if (!parent.exists()) {
if (!parent.mkdirs()) {
throw new IOException("could not create" + parent);
}
}
{code}
Now mkdirs() returns true *only* if the method actually created the
directories; it's theoretically possible for the directory to be created in the
window between the exists() and mkdirs() invocations.
Also, the initial exists() call is redundant, because that's what mkdirs() does
anyway (in the RI implementation, at least).
I suggest the following instead:
{code}
final File parent = file.getParentFile();
if (!parent.mkdirs() && !parent.exists()) {
throw new IOException("could not create" + parent);
}
}
{code}
If mkdirs() returns false, the code then checks to see if the directory exists,
so the throws clause will only be invoked if the parent really cannot be
created.
The same code also appears in AbstractTestCase and
FilesystemAlterationMonitorTestCase.
--
This message is automatically generated by JIRA.
For more information on JIRA, see: http://www.atlassian.com/software/jira