From c1b49b56d4132efa2e06deb8f23508d0de4c8800 Mon Sep 17 00:00:00 2001 From: Rafael Espindola Date: Tue, 16 Jul 2013 19:44:17 +0000 Subject: Add a wrapper for open. This centralizes the handling of O_BINARY and opens the way for hiding more differences (like how open behaves with directories). git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@186447 91177308-0d34-0410-b5e6-96231b3b80d8 --- tools/llvm-ar/llvm-ar.cpp | 25 +++++++------------------ 1 file changed, 7 insertions(+), 18 deletions(-) (limited to 'tools/llvm-ar') diff --git a/tools/llvm-ar/llvm-ar.cpp b/tools/llvm-ar/llvm-ar.cpp index d65f9ecc9f..9b55a8130b 100644 --- a/tools/llvm-ar/llvm-ar.cpp +++ b/tools/llvm-ar/llvm-ar.cpp @@ -26,7 +26,6 @@ #include "llvm/Support/raw_ostream.h" #include #include -#include #include #if !defined(_MSC_VER) && !defined(__MINGW32__) @@ -299,19 +298,14 @@ static void doDisplayTable(StringRef Name, object::Archive::child_iterator I) { // Implement the 'x' operation. This function extracts files back to the file // system. static void doExtract(StringRef Name, object::Archive::child_iterator I) { - // Open up a file stream for writing - // FIXME: we should abstract this, O_BINARY in particular. - int OpenFlags = O_TRUNC | O_WRONLY | O_CREAT; -#ifdef O_BINARY - OpenFlags |= O_BINARY; -#endif - // Retain the original mode. sys::fs::perms Mode = I->getAccessMode(); + SmallString<128> Storage = Name; - int FD = open(Name.str().c_str(), OpenFlags, Mode); - if (FD < 0) - fail("Could not open output file"); + int FD; + failIfError( + sys::fs::openFileForWrite(Storage.c_str(), FD, sys::fs::F_None, Mode), + Storage.c_str()); { raw_fd_ostream file(FD, false); @@ -559,13 +553,8 @@ static void performWriteOperation(ArchiveOperation Operation, if (I->isNewMember()) { const char *FileName = I->getNew(); - int OpenFlags = O_RDONLY; -#ifdef O_BINARY - OpenFlags |= O_BINARY; -#endif - int FD = ::open(FileName, OpenFlags); - if (FD == -1) - return failIfError(error_code(errno, posix_category()), FileName); + int FD; + failIfError(sys::fs::openFileForRead(FileName, FD), FileName); sys::fs::file_status Status; failIfError(sys::fs::status(FD, Status), FileName); -- cgit v1.2.3