mirror of
https://github.com/bitcoin/bitcoin.git
synced 2025-12-07 11:12:50 +01:00
Wrap create_directory calls in try...catch blocks.
Ignores any exceptions thrown if directory exists, otherwise re-throws exception. Rebased-By: Wladimir J. van der Laan <laanwj@gmail.com>
This commit is contained in:
committed by
Wladimir J. van der Laan
parent
5a2ed60a04
commit
2b7709dc84
19
src/util.cpp
19
src/util.cpp
@@ -976,7 +976,7 @@ boost::filesystem::path GetDefaultDataDir()
|
||||
#ifdef MAC_OSX
|
||||
// Mac
|
||||
pathRet /= "Library/Application Support";
|
||||
fs::create_directory(pathRet);
|
||||
TryCreateDirectory(pathRet);
|
||||
return pathRet / "Bitcoin";
|
||||
#else
|
||||
// Unix
|
||||
@@ -1090,6 +1090,23 @@ bool RenameOver(boost::filesystem::path src, boost::filesystem::path dest)
|
||||
#endif /* WIN32 */
|
||||
}
|
||||
|
||||
|
||||
// Ignores exceptions thrown by boost's create_directory if the requested directory exists.
|
||||
// Specifically handles case where path p exists, but it wasn't possible for the user to write to the parent directory.
|
||||
bool TryCreateDirectory(const boost::filesystem::path& p)
|
||||
{
|
||||
try
|
||||
{
|
||||
return boost::filesystem::create_directory(p);
|
||||
} catch (boost::filesystem::filesystem_error) {
|
||||
if (!boost::filesystem::exists(p) || !boost::filesystem::is_directory(p))
|
||||
throw;
|
||||
}
|
||||
|
||||
// create_directory didn't create the directory, it had to have existed already
|
||||
return false;
|
||||
}
|
||||
|
||||
void FileCommit(FILE *fileout)
|
||||
{
|
||||
fflush(fileout); // harmless if redundantly called
|
||||
|
||||
Reference in New Issue
Block a user