From cca68faac23e0a6c5bb89135cbd3b73ebcd91834 Mon Sep 17 00:00:00 2001 From: Chris Lattner Date: Tue, 18 Jul 2006 06:57:51 +0000 Subject: [PATCH] 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 --- lib/System/Unix/MappedFile.inc | 18 ++++++++---------- 1 file changed, 8 insertions(+), 10 deletions(-) diff --git a/lib/System/Unix/MappedFile.inc b/lib/System/Unix/MappedFile.inc index d194908a30e..8cd2a969473 100644 --- a/lib/System/Unix/MappedFile.inc +++ b/lib/System/Unix/MappedFile.inc @@ -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() {