Revert 124754 and 124760 as they made clang unusable in the presence of symbolic

links.

llvm-svn: 124776
This commit is contained in:
Rafael Espindola 2011-02-03 04:35:45 +00:00
parent ed27eadd29
commit 5b55454065
1 changed files with 0 additions and 84 deletions

View File

@ -271,91 +271,10 @@ const DirectoryEntry *FileManager::getDirectory(llvm::StringRef Filename) {
return &UDE;
}
/// \brief Canonicalize a file or path name by eliminating redundant
/// "foo/.." and "./" path components.
///
/// Uses the given scratch space to store the resulting string, if needed.
static llvm::StringRef CanonicalizeFileName(llvm::StringRef Filename,
llvm::SmallVectorImpl<char> &Scratch) {
size_t Start = 0;
bool Changed = false;
size_t FirstSlash = Filename.find('/', Start);
do {
if (FirstSlash == llvm::StringRef::npos) {
// No more components. Just copy the rest of the file name, if
// we need to.
if (Changed)
Scratch.append(Filename.begin() + Start, Filename.end());
break;
}
if (Start + 1 == FirstSlash && Filename[Start] == '.') {
// We have './'; remove it.
// If we haven't changed anything previously, copy the
// starting bits here.
if (!Changed) {
Scratch.clear();
Scratch.append(Filename.begin(), Filename.begin() + Start);
Changed = true;
}
// Skip over the './'.
Start = FirstSlash + 1;
FirstSlash = Filename.find('/', Start);
continue;
}
size_t SecondSlash = Filename.find('/', FirstSlash + 1);
if (SecondSlash != llvm::StringRef::npos &&
SecondSlash - FirstSlash == 3 &&
Filename[FirstSlash + 1] == '.' &&
Filename[FirstSlash + 2] == '.') {
// We have 'foo/../'; remove it.
// If we haven't changed anything previously, copy the
// starting bits here.
if (!Changed) {
Scratch.clear();
Scratch.append(Filename.begin(), Filename.begin() + Start);
Changed = true;
}
// Skip over the 'foo/..'.
Start = SecondSlash + 1;
FirstSlash = Filename.find('/', Start);
continue;
}
if (Changed)
Scratch.append(Filename.begin() + Start,
Filename.begin() + FirstSlash + 1);
Start = FirstSlash + 1;
if (SecondSlash == llvm::StringRef::npos)
FirstSlash = Filename.find('/', Start);
else
FirstSlash = SecondSlash;
} while (true);
if (Changed) {
#if 0
llvm::errs() << "Canonicalized \"" << Filename << "\" to \""
<< llvm::StringRef(Scratch.data(), Scratch.size()) << "\"\n";
#endif
return llvm::StringRef(Scratch.data(), Scratch.size());
}
return Filename;
}
/// getFile - Lookup, cache, and verify the specified file. This returns null
/// if the file doesn't exist.
///
const FileEntry *FileManager::getFile(llvm::StringRef Filename) {
llvm::SmallString<128> FilenameScratch;
Filename = CanonicalizeFileName(Filename, FilenameScratch);
++NumFileLookups;
// See if there is already an entry in the map.
@ -424,9 +343,6 @@ const FileEntry *FileManager::getFile(llvm::StringRef Filename) {
const FileEntry *
FileManager::getVirtualFile(llvm::StringRef Filename, off_t Size,
time_t ModificationTime) {
llvm::SmallString<128> FilenameScratch;
Filename = CanonicalizeFileName(Filename, FilenameScratch);
++NumFileLookups;
// See if there is already an entry in the map.