[Support] Add a function to check if a file resides locally.
Differential Revision: https://reviews.llvm.org/D30010 llvm-svn: 295768
This commit is contained in:
@@ -103,7 +103,7 @@ public:
|
||||
|
||||
static ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
getFileAux(const Twine &Filename, int64_t FileSize, uint64_t MapSize,
|
||||
uint64_t Offset, bool RequiresNullTerminator, bool IsVolatileSize);
|
||||
uint64_t Offset, bool RequiresNullTerminator, bool IsVolatile);
|
||||
|
||||
std::unique_ptr<MemoryBuffer>
|
||||
MemoryBuffer::getMemBuffer(StringRef InputData, StringRef BufferName,
|
||||
@@ -178,8 +178,8 @@ MemoryBuffer::getFileOrSTDIN(const Twine &Filename, int64_t FileSize,
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
MemoryBuffer::getFileSlice(const Twine &FilePath, uint64_t MapSize,
|
||||
uint64_t Offset) {
|
||||
return getFileAux(FilePath, -1, MapSize, Offset, false, false);
|
||||
uint64_t Offset, bool IsVolatile) {
|
||||
return getFileAux(FilePath, -1, MapSize, Offset, false, IsVolatile);
|
||||
}
|
||||
|
||||
|
||||
@@ -254,19 +254,19 @@ getMemoryBufferForStream(int FD, const Twine &BufferName) {
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
MemoryBuffer::getFile(const Twine &Filename, int64_t FileSize,
|
||||
bool RequiresNullTerminator, bool IsVolatileSize) {
|
||||
bool RequiresNullTerminator, bool IsVolatile) {
|
||||
return getFileAux(Filename, FileSize, FileSize, 0,
|
||||
RequiresNullTerminator, IsVolatileSize);
|
||||
RequiresNullTerminator, IsVolatile);
|
||||
}
|
||||
|
||||
static ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
getOpenFileImpl(int FD, const Twine &Filename, uint64_t FileSize,
|
||||
uint64_t MapSize, int64_t Offset, bool RequiresNullTerminator,
|
||||
bool IsVolatileSize);
|
||||
bool IsVolatile);
|
||||
|
||||
static ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
getFileAux(const Twine &Filename, int64_t FileSize, uint64_t MapSize,
|
||||
uint64_t Offset, bool RequiresNullTerminator, bool IsVolatileSize) {
|
||||
uint64_t Offset, bool RequiresNullTerminator, bool IsVolatile) {
|
||||
int FD;
|
||||
std::error_code EC = sys::fs::openFileForRead(Filename, FD);
|
||||
if (EC)
|
||||
@@ -274,7 +274,7 @@ getFileAux(const Twine &Filename, int64_t FileSize, uint64_t MapSize,
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> Ret =
|
||||
getOpenFileImpl(FD, Filename, FileSize, MapSize, Offset,
|
||||
RequiresNullTerminator, IsVolatileSize);
|
||||
RequiresNullTerminator, IsVolatile);
|
||||
close(FD);
|
||||
return Ret;
|
||||
}
|
||||
@@ -285,11 +285,11 @@ static bool shouldUseMmap(int FD,
|
||||
off_t Offset,
|
||||
bool RequiresNullTerminator,
|
||||
int PageSize,
|
||||
bool IsVolatileSize) {
|
||||
bool IsVolatile) {
|
||||
// mmap may leave the buffer without null terminator if the file size changed
|
||||
// by the time the last page is mapped in, so avoid it if the file size is
|
||||
// likely to change.
|
||||
if (IsVolatileSize)
|
||||
if (IsVolatile)
|
||||
return false;
|
||||
|
||||
// We don't use mmap for small files because this can severely fragment our
|
||||
@@ -300,7 +300,6 @@ static bool shouldUseMmap(int FD,
|
||||
if (!RequiresNullTerminator)
|
||||
return true;
|
||||
|
||||
|
||||
// If we don't know the file size, use fstat to find out. fstat on an open
|
||||
// file descriptor is cheaper than stat on a random path.
|
||||
// FIXME: this chunk of code is duplicated, but it avoids a fstat when
|
||||
@@ -338,7 +337,7 @@ static bool shouldUseMmap(int FD,
|
||||
static ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
getOpenFileImpl(int FD, const Twine &Filename, uint64_t FileSize,
|
||||
uint64_t MapSize, int64_t Offset, bool RequiresNullTerminator,
|
||||
bool IsVolatileSize) {
|
||||
bool IsVolatile) {
|
||||
static int PageSize = sys::Process::getPageSize();
|
||||
|
||||
// Default is to map the full file.
|
||||
@@ -365,7 +364,7 @@ getOpenFileImpl(int FD, const Twine &Filename, uint64_t FileSize,
|
||||
}
|
||||
|
||||
if (shouldUseMmap(FD, FileSize, MapSize, Offset, RequiresNullTerminator,
|
||||
PageSize, IsVolatileSize)) {
|
||||
PageSize, IsVolatile)) {
|
||||
std::error_code EC;
|
||||
std::unique_ptr<MemoryBuffer> Result(
|
||||
new (NamedBufferAlloc(Filename))
|
||||
@@ -415,17 +414,16 @@ getOpenFileImpl(int FD, const Twine &Filename, uint64_t FileSize,
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
MemoryBuffer::getOpenFile(int FD, const Twine &Filename, uint64_t FileSize,
|
||||
bool RequiresNullTerminator, bool IsVolatileSize) {
|
||||
bool RequiresNullTerminator, bool IsVolatile) {
|
||||
return getOpenFileImpl(FD, Filename, FileSize, FileSize, 0,
|
||||
RequiresNullTerminator, IsVolatileSize);
|
||||
RequiresNullTerminator, IsVolatile);
|
||||
}
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>>
|
||||
MemoryBuffer::getOpenFileSlice(int FD, const Twine &Filename, uint64_t MapSize,
|
||||
int64_t Offset) {
|
||||
int64_t Offset, bool IsVolatile) {
|
||||
assert(MapSize != uint64_t(-1));
|
||||
return getOpenFileImpl(FD, Filename, -1, MapSize, Offset, false,
|
||||
/*IsVolatileSize*/ false);
|
||||
return getOpenFileImpl(FD, Filename, -1, MapSize, Offset, false, IsVolatile);
|
||||
}
|
||||
|
||||
ErrorOr<std::unique_ptr<MemoryBuffer>> MemoryBuffer::getSTDIN() {
|
||||
|
||||
Reference in New Issue
Block a user