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
This commit is contained in:
Reid Spencer
2006-08-23 00:39:35 +00:00
parent b590a75eb5
commit e5c9cb5eb6
7 changed files with 71 additions and 47 deletions

View File

@@ -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;
}