diff options
Diffstat (limited to 'lib/Basic/SourceManager.cpp')
-rw-r--r-- | lib/Basic/SourceManager.cpp | 25 |
1 files changed, 12 insertions, 13 deletions
diff --git a/lib/Basic/SourceManager.cpp b/lib/Basic/SourceManager.cpp index b69ba53f7b..ac2fe3d69e 100644 --- a/lib/Basic/SourceManager.cpp +++ b/lib/Basic/SourceManager.cpp @@ -21,6 +21,7 @@ #include "llvm/System/Path.h" #include <algorithm> #include <string> +#include <cstring> #include <cstdio> using namespace clang; @@ -532,19 +533,17 @@ bool SourceManager::overrideFileContents(const FileEntry *SourceFile, } std::pair<const char*, const char*> -SourceManager::getBufferData(FileID FID, llvm::StringRef &FileName, - std::string &Error) const { - const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(FileName, Error); - if (!Error.empty()) - return std::make_pair((const char *)0, (const char *)0); - return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd()); -} - -std::pair<const char*, const char*> -SourceManager::getBufferData(FileID FID, Diagnostic &Diags) const { - const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(Diags); - if (!Buf) - return std::make_pair((const char *)0, (const char *)0); +SourceManager::getBufferData(FileID FID, bool *Invalid) const { + if (Invalid) + *Invalid = false; + + const llvm::MemoryBuffer *Buf = getBuffer(FID).getBuffer(Diag); + if (!Buf) { + if (*Invalid) + *Invalid = true; + const char *FakeText = ""; + return std::make_pair(FakeText, FakeText + strlen(FakeText)); + } return std::make_pair(Buf->getBufferStart(), Buf->getBufferEnd()); } |