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
diff --git a/lib/System/Unix/MappedFile.inc b/lib/System/Unix/MappedFile.inc
index d194908..8cd2a96 100644
--- a/lib/System/Unix/MappedFile.inc
+++ b/lib/System/Unix/MappedFile.inc
@@ -43,7 +43,6 @@
   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 @@
       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() {