Reduce code in the error path by only allocating info_ if everything looks

good.


git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29170 91177308-0d34-0410-b5e6-96231b3b80d8
This commit is contained in:
Chris Lattner 2006-07-18 06:57:51 +00:00
parent c22c7d3cdf
commit cca68faac2

View File

@ -43,7 +43,6 @@ void MappedFile::initialize() {
if (!path_.exists())
throw std::string("Can't open file: ") + path_.toString();
info_ = new MappedFileInfo;
int mode = 0;
if (options_&READ_ACCESS)
if (options_&WRITE_ACCESS)
@ -52,20 +51,19 @@ void MappedFile::initialize() {
mode = O_RDONLY;
else if (options_&WRITE_ACCESS)
mode = O_WRONLY;
info_->fd_ = ::open(path_.c_str(),mode);
if (info_->fd_ < 0) {
delete info_;
info_ = 0;
int FD = ::open(path_.c_str(), mode);
if (FD < 0)
ThrowErrno(std::string("Can't open file: ") + path_.toString());
}
struct stat sbuf;
if(::fstat(info_->fd_, &info_->sbuf_) < 0) {
::close(info_->fd_);
delete info_;
info_ = 0;
if(::fstat(FD, &sbuf) < 0) {
::close(FD);
ThrowErrno(std::string("Can't stat file: ") + path_.toString());
}
info_ = new MappedFileInfo;
info_->fd_ = FD;
info_->sbuf_ = sbuf;
}
void MappedFile::terminate() {