aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/llvm/Debugger/SourceFile.h5
-rw-r--r--lib/Debugger/SourceFile.cpp4
-rw-r--r--lib/Support/FileUtilities.cpp20
3 files changed, 21 insertions, 8 deletions
diff --git a/include/llvm/Debugger/SourceFile.h b/include/llvm/Debugger/SourceFile.h
index 6d49fbe5d2..e54660cb7a 100644
--- a/include/llvm/Debugger/SourceFile.h
+++ b/include/llvm/Debugger/SourceFile.h
@@ -50,7 +50,10 @@ namespace llvm {
/// reading it, or if the user cancels the operation. Instead, it will just
/// be an empty source file.
SourceFile(const std::string &fn, const GlobalVariable *Desc)
- : Filename(fn), Descriptor(Desc), File(Filename) {
+ : Filename(fn), Descriptor(Desc), File() {
+ std::string ErrMsg;
+ if (File.open(Filename, sys::MappedFile::READ_ACCESS, &ErrMsg))
+ throw ErrMsg;
readFile();
}
~SourceFile() {
diff --git a/lib/Debugger/SourceFile.cpp b/lib/Debugger/SourceFile.cpp
index 222cdfa26a..799231fc8d 100644
--- a/lib/Debugger/SourceFile.cpp
+++ b/lib/Debugger/SourceFile.cpp
@@ -19,7 +19,9 @@ using namespace llvm;
/// readFile - Load Filename
///
void SourceFile::readFile() {
- File.map();
+ std::string ErrMsg;
+ if (File.map(&ErrMsg))
+ throw ErrMsg;
}
/// calculateLineOffsets - Compute the LineOffset vector for the current file.
diff --git a/lib/Support/FileUtilities.cpp b/lib/Support/FileUtilities.cpp
index d4608ccb65..313598942a 100644
--- a/lib/Support/FileUtilities.cpp
+++ b/lib/Support/FileUtilities.cpp
@@ -147,9 +147,11 @@ int llvm::DiffFilesWithTolerance(const sys::Path &FileA,
double AbsTol, double RelTol,
std::string *Error) {
sys::FileStatus FileAStat, FileBStat;
- if (FileA.getFileStatus(FileAStat, Error) ||
- FileB.getFileStatus(FileBStat, Error))
+ if (FileA.getFileStatus(FileAStat, Error))
return 2;
+ if (FileB.getFileStatus(FileBStat, Error))
+ return 2;
+
// Check for zero length files because some systems croak when you try to
// mmap an empty file.
size_t A_size = FileAStat.getSize();
@@ -165,10 +167,16 @@ int llvm::DiffFilesWithTolerance(const sys::Path &FileA,
try {
// Now its safe to mmap the files into memory becasue both files
// have a non-zero size.
- sys::MappedFile F1(FileA);
- sys::MappedFile F2(FileB);
- F1.map();
- F2.map();
+ sys::MappedFile F1;
+ if (F1.open(FileA, sys::MappedFile::READ_ACCESS, Error))
+ return 2;
+ sys::MappedFile F2;
+ if (F2.open(FileB, sys::MappedFile::READ_ACCESS, Error))
+ return 2;
+ if (!F1.map(Error))
+ return 2;
+ if (!F2.map(Error))
+ return 2;
// Okay, now that we opened the files, scan them for the first difference.
char *File1Start = F1.charBase();