mirror of
https://github.com/c64scene-ar/llvm-6502.git
synced 2025-09-12 16:25:18 +00:00
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
This commit is contained in:
@@ -26,7 +26,6 @@
|
||||
#include "llvm/Support/raw_ostream.h"
|
||||
#include <algorithm>
|
||||
#include <cstdlib>
|
||||
#include <fcntl.h>
|
||||
#include <memory>
|
||||
|
||||
#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);
|
||||
|
Reference in New Issue
Block a user