summaryrefslogtreecommitdiff
path: root/lib/Support/FileUtilities.cpp
diff options
context:
space:
mode:
authorReid Spencer <rspencer@reidspencer.com>2006-08-23 20:37:59 +0000
committerReid Spencer <rspencer@reidspencer.com>2006-08-23 20:37:59 +0000
commit30493372f3d403c9637eb479e7d0c4388b715c41 (patch)
treea9f18b907c0a3d5aa710143870f7e82c523f775b /lib/Support/FileUtilities.cpp
parent4c97bed5d9f20bba3fbc3d13199cd9d6a320329e (diff)
downloadllvm-30493372f3d403c9637eb479e7d0c4388b715c41.tar.gz
llvm-30493372f3d403c9637eb479e7d0c4388b715c41.tar.bz2
llvm-30493372f3d403c9637eb479e7d0c4388b715c41.tar.xz
For PR797:
Final remove of exception handling from this file. lib/System can no longer throw exceptions so there's no need for try/catch blocks here. git-svn-id: https://llvm.org/svn/llvm-project/llvm/trunk@29848 91177308-0d34-0410-b5e6-96231b3b80d8
Diffstat (limited to 'lib/Support/FileUtilities.cpp')
-rw-r--r--lib/Support/FileUtilities.cpp158
1 files changed, 75 insertions, 83 deletions
diff --git a/lib/Support/FileUtilities.cpp b/lib/Support/FileUtilities.cpp
index 313598942a..ad4ab8f004 100644
--- a/lib/Support/FileUtilities.cpp
+++ b/lib/Support/FileUtilities.cpp
@@ -164,97 +164,89 @@ int llvm::DiffFilesWithTolerance(const sys::Path &FileA,
if ((A_size == 0 || B_size == 0))
return 1;
- try {
- // Now its safe to mmap the files into memory becasue both files
- // have a non-zero size.
- 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();
- char *File2Start = F2.charBase();
- char *File1End = File1Start+A_size;
- char *File2End = File2Start+B_size;
- char *F1P = File1Start;
- char *F2P = File2Start;
-
- if (A_size == B_size) {
- // Are the buffers identical?
- if (std::memcmp(File1Start, File2Start, A_size) == 0)
- return 0;
-
- if (AbsTol == 0 && RelTol == 0)
- return 1; // Files different!
- }
-
- char *OrigFile1Start = File1Start;
- char *OrigFile2Start = File2Start;
-
- // If the files need padding, do so now.
- PadFileIfNeeded(File1Start, File1End, F1P);
- PadFileIfNeeded(File2Start, File2End, F2P);
+ // Now its safe to mmap the files into memory becasue both files
+ // have a non-zero size.
+ 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;
- bool CompareFailed = false;
- while (1) {
- // Scan for the end of file or next difference.
- while (F1P < File1End && F2P < File2End && *F1P == *F2P)
- ++F1P, ++F2P;
+ // Okay, now that we opened the files, scan them for the first difference.
+ char *File1Start = F1.charBase();
+ char *File2Start = F2.charBase();
+ char *File1End = File1Start+A_size;
+ char *File2End = File2Start+B_size;
+ char *F1P = File1Start;
+ char *F2P = File2Start;
+
+ if (A_size == B_size) {
+ // Are the buffers identical?
+ if (std::memcmp(File1Start, File2Start, A_size) == 0)
+ return 0;
+
+ if (AbsTol == 0 && RelTol == 0)
+ return 1; // Files different!
+ }
- if (F1P >= File1End || F2P >= File2End) break;
+ char *OrigFile1Start = File1Start;
+ char *OrigFile2Start = File2Start;
- // Okay, we must have found a difference. Backup to the start of the
- // current number each stream is at so that we can compare from the
- // beginning.
- F1P = BackupNumber(F1P, File1Start);
- F2P = BackupNumber(F2P, File2Start);
+ // If the files need padding, do so now.
+ PadFileIfNeeded(File1Start, File1End, F1P);
+ PadFileIfNeeded(File2Start, File2End, F2P);
- // Now that we are at the start of the numbers, compare them, exiting if
- // they don't match.
- if (CompareNumbers(F1P, F2P, File1End, File2End, AbsTol, RelTol, Error)) {
- CompareFailed = true;
- break;
- }
- }
+ bool CompareFailed = false;
+ while (1) {
+ // Scan for the end of file or next difference.
+ while (F1P < File1End && F2P < File2End && *F1P == *F2P)
+ ++F1P, ++F2P;
- // Okay, we reached the end of file. If both files are at the end, we
- // succeeded.
- bool F1AtEnd = F1P >= File1End;
- bool F2AtEnd = F2P >= File2End;
- if (!CompareFailed && (!F1AtEnd || !F2AtEnd)) {
- // Else, we might have run off the end due to a number: backup and retry.
- if (F1AtEnd && isNumberChar(F1P[-1])) --F1P;
- if (F2AtEnd && isNumberChar(F2P[-1])) --F2P;
- F1P = BackupNumber(F1P, File1Start);
- F2P = BackupNumber(F2P, File2Start);
+ if (F1P >= File1End || F2P >= File2End) break;
- // Now that we are at the start of the numbers, compare them, exiting if
- // they don't match.
- if (CompareNumbers(F1P, F2P, File1End, File2End, AbsTol, RelTol, Error))
- CompareFailed = true;
+ // Okay, we must have found a difference. Backup to the start of the
+ // current number each stream is at so that we can compare from the
+ // beginning.
+ F1P = BackupNumber(F1P, File1Start);
+ F2P = BackupNumber(F2P, File2Start);
- // If we found the end, we succeeded.
- if (F1P < File1End || F2P < File2End)
- CompareFailed = true;
+ // Now that we are at the start of the numbers, compare them, exiting if
+ // they don't match.
+ if (CompareNumbers(F1P, F2P, File1End, File2End, AbsTol, RelTol, Error)) {
+ CompareFailed = true;
+ break;
}
+ }
- if (OrigFile1Start != File1Start)
- delete[] (File1Start-1); // Back up past null byte
- if (OrigFile2Start != File2Start)
- delete[] (File2Start-1); // Back up past null byte
- return CompareFailed;
- } catch (const std::string &Msg) {
- if (Error) *Error = Msg;
- return 2;
- } catch (...) {
- *Error = "Unknown Exception Occurred";
- return 2;
+ // Okay, we reached the end of file. If both files are at the end, we
+ // succeeded.
+ bool F1AtEnd = F1P >= File1End;
+ bool F2AtEnd = F2P >= File2End;
+ if (!CompareFailed && (!F1AtEnd || !F2AtEnd)) {
+ // Else, we might have run off the end due to a number: backup and retry.
+ if (F1AtEnd && isNumberChar(F1P[-1])) --F1P;
+ if (F2AtEnd && isNumberChar(F2P[-1])) --F2P;
+ F1P = BackupNumber(F1P, File1Start);
+ F2P = BackupNumber(F2P, File2Start);
+
+ // Now that we are at the start of the numbers, compare them, exiting if
+ // they don't match.
+ if (CompareNumbers(F1P, F2P, File1End, File2End, AbsTol, RelTol, Error))
+ CompareFailed = true;
+
+ // If we found the end, we succeeded.
+ if (F1P < File1End || F2P < File2End)
+ CompareFailed = true;
}
+
+ if (OrigFile1Start != File1Start)
+ delete[] (File1Start-1); // Back up past null byte
+ if (OrigFile2Start != File2Start)
+ delete[] (File2Start-1); // Back up past null byte
+ return CompareFailed;
}