diff options
author | Reid Spencer <rspencer@reidspencer.com> | 2006-08-23 00:39:35 +0000 |
---|---|---|
committer | Reid Spencer <rspencer@reidspencer.com> | 2006-08-23 00:39:35 +0000 |
commit | e5c9cb5eb6bce502faaedea04014dab46f6540f4 (patch) | |
tree | 7e0155eeab8ecac7a202cff5d092c0f73c15cce8 /lib | |
parent | b590a75eb566be4257f23340d3037ea1447e997e (diff) |
For PR797:
Remove exceptions from the Path::create*OnDisk methods. Update their users
to handle error messages via arguments and result codes.
git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29840 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib')
-rw-r--r-- | lib/Archive/ArchiveWriter.cpp | 6 | ||||
-rw-r--r-- | lib/Bytecode/Archive/ArchiveWriter.cpp | 6 | ||||
-rw-r--r-- | lib/System/Unix/Path.inc | 37 |
3 files changed, 30 insertions, 19 deletions
diff --git a/lib/Archive/ArchiveWriter.cpp b/lib/Archive/ArchiveWriter.cpp index c99d8510c5..c3fda5fe1a 100644 --- a/lib/Archive/ArchiveWriter.cpp +++ b/lib/Archive/ArchiveWriter.cpp @@ -389,7 +389,8 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress, // Create a temporary file to store the archive in sys::Path TmpArchive = archPath; - TmpArchive.createTemporaryFileOnDisk(); + if (TmpArchive.createTemporaryFileOnDisk(error)) + return false; // Make sure the temporary gets removed if we crash sys::RemoveFileOnSignal(TmpArchive); @@ -452,7 +453,8 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress, // Open another temporary file in order to avoid invalidating the // mmapped data sys::Path FinalFilePath = archPath; - FinalFilePath.createTemporaryFileOnDisk(); + if (FinalFilePath.createTemporaryFileOnDisk(error)) + return false; sys::RemoveFileOnSignal(FinalFilePath); std::ofstream FinalFile(FinalFilePath.c_str(), io_mode); diff --git a/lib/Bytecode/Archive/ArchiveWriter.cpp b/lib/Bytecode/Archive/ArchiveWriter.cpp index c99d8510c5..c3fda5fe1a 100644 --- a/lib/Bytecode/Archive/ArchiveWriter.cpp +++ b/lib/Bytecode/Archive/ArchiveWriter.cpp @@ -389,7 +389,8 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress, // Create a temporary file to store the archive in sys::Path TmpArchive = archPath; - TmpArchive.createTemporaryFileOnDisk(); + if (TmpArchive.createTemporaryFileOnDisk(error)) + return false; // Make sure the temporary gets removed if we crash sys::RemoveFileOnSignal(TmpArchive); @@ -452,7 +453,8 @@ Archive::writeToDisk(bool CreateSymbolTable, bool TruncateNames, bool Compress, // Open another temporary file in order to avoid invalidating the // mmapped data sys::Path FinalFilePath = archPath; - FinalFilePath.createTemporaryFileOnDisk(); + if (FinalFilePath.createTemporaryFileOnDisk(error)) + return false; sys::RemoveFileOnSignal(FinalFilePath); std::ofstream FinalFile(FinalFilePath.c_str(), io_mode); diff --git a/lib/System/Unix/Path.inc b/lib/System/Unix/Path.inc index db7f4c6fab..7fc77a9976 100644 --- a/lib/System/Unix/Path.inc +++ b/lib/System/Unix/Path.inc @@ -517,7 +517,7 @@ Path::eraseSuffix() { } bool -Path::createDirectoryOnDisk( bool create_parents) { +Path::createDirectoryOnDisk( bool create_parents, std::string* ErrMsg ) { // Get a writeable copy of the path name char pathname[MAXPATHLEN]; path.copy(pathname,MAXPATHLEN); @@ -540,8 +540,11 @@ Path::createDirectoryOnDisk( bool create_parents) { while ( next != 0 ) { *next = 0; if (0 != access(pathname, F_OK | R_OK | W_OK)) - if (0 != mkdir(pathname, S_IRWXU | S_IRWXG)) - ThrowErrno(std::string(pathname) + ": can't create directory"); + if (0 != mkdir(pathname, S_IRWXU | S_IRWXG)) { + MakeErrMsg(ErrMsg, + std::string(pathname) + ": can't create directory"); + return true; + } char* save = next; next = strchr(next+1,'/'); *save = '/'; @@ -549,33 +552,37 @@ Path::createDirectoryOnDisk( bool create_parents) { } if (0 != access(pathname, F_OK | R_OK)) - if (0 != mkdir(pathname, S_IRWXU | S_IRWXG)) - ThrowErrno(std::string(pathname) + ": can't create directory"); - return true; + if (0 != mkdir(pathname, S_IRWXU | S_IRWXG)) { + MakeErrMsg(ErrMsg, std::string(pathname) + ": can't create directory"); + return true; + } + return false; } bool -Path::createFileOnDisk() { +Path::createFileOnDisk(std::string* ErrMsg) { // Create the file int fd = ::creat(path.c_str(), S_IRUSR | S_IWUSR); - if (fd < 0) - ThrowErrno(path + ": can't create file"); + if (fd < 0) { + MakeErrMsg(ErrMsg, path + ": can't create file"); + return true; + } ::close(fd); - - return true; + return false; } bool -Path::createTemporaryFileOnDisk(bool reuse_current) { +Path::createTemporaryFileOnDisk(bool reuse_current, std::string* ErrMsg) { // Make this into a unique file name makeUnique( reuse_current ); // create the file - int outFile = ::open(path.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666); - if (outFile != -1) { - ::close(outFile); + int fd = ::open(path.c_str(), O_WRONLY|O_CREAT|O_TRUNC, 0666); + if (fd < 0) { + MakeErrMsg(ErrMsg, path + ": can't create temporary file"); return true; } + ::close(fd); return false; } |