diff --git a/llvm/include/llvm/Debugger/SourceFile.h b/llvm/include/llvm/Debugger/SourceFile.h index 6d49fbe5d221..e54660cb7a92 100644 --- a/llvm/include/llvm/Debugger/SourceFile.h +++ b/llvm/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/llvm/lib/Debugger/SourceFile.cpp b/llvm/lib/Debugger/SourceFile.cpp index 222cdfa26aaa..799231fc8ddb 100644 --- a/llvm/lib/Debugger/SourceFile.cpp +++ b/llvm/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/llvm/lib/Support/FileUtilities.cpp b/llvm/lib/Support/FileUtilities.cpp index d4608ccb65b3..313598942a74 100644 --- a/llvm/lib/Support/FileUtilities.cpp +++ b/llvm/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();