Reduce code in the error path by only allocating info_ if everything looks
authorChris Lattner <sabre@nondot.org>
Tue, 18 Jul 2006 06:57:51 +0000 (06:57 +0000)
committerChris Lattner <sabre@nondot.org>
Tue, 18 Jul 2006 06:57:51 +0000 (06:57 +0000)
good.

git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29170 91177308-0d34-0410-b5e6-96231b3b80d8

lib/System/Unix/MappedFile.inc

index d194908a30e6939937c82f7767e59b4d5c4b9526..8cd2a9694735b16e326b7efc99386c008d07bab4 100644 (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() {