forked from OSchip/llvm-project
Attempt to make clang-x64-ninja-win7 happy.
It looks like we were somehow relying somewhere on removing 'foo/./bar' but *not* 'foo/../foo/bar'. Currently investigating. llvm-svn: 243600
This commit is contained in:
parent
ba46a47e07
commit
3e36e507ec
|
@ -267,7 +267,7 @@ public:
|
|||
time_t ModificationTime);
|
||||
|
||||
/// \brief Remove any './' components from a path.
|
||||
static bool removeDotPaths(SmallVectorImpl<char> &Path);
|
||||
static bool removeDotPaths(SmallVectorImpl<char> &Path, bool RemoveDotDot = false);
|
||||
|
||||
/// \brief Retrieve the canonical name for a given directory.
|
||||
///
|
||||
|
|
|
@ -517,7 +517,7 @@ void FileManager::modifyFileEntry(FileEntry *File,
|
|||
/// Remove '.' and '..' path components from the given absolute path.
|
||||
/// \return \c true if any changes were made.
|
||||
// FIXME: Move this to llvm::sys::path.
|
||||
bool FileManager::removeDotPaths(SmallVectorImpl<char> &Path) {
|
||||
bool FileManager::removeDotPaths(SmallVectorImpl<char> &Path, bool RemoveDotDot) {
|
||||
using namespace llvm::sys;
|
||||
|
||||
SmallVector<StringRef, 16> ComponentStack;
|
||||
|
@ -528,10 +528,12 @@ bool FileManager::removeDotPaths(SmallVectorImpl<char> &Path) {
|
|||
for (StringRef C : llvm::make_range(path::begin(Rel), path::end(Rel))) {
|
||||
if (C == ".")
|
||||
continue;
|
||||
if (C == "..") {
|
||||
if (!ComponentStack.empty())
|
||||
ComponentStack.pop_back();
|
||||
continue;
|
||||
if (RemoveDotDot) {
|
||||
if (C == "..") {
|
||||
if (!ComponentStack.empty())
|
||||
ComponentStack.pop_back();
|
||||
continue;
|
||||
}
|
||||
}
|
||||
ComponentStack.push_back(C);
|
||||
}
|
||||
|
@ -566,7 +568,7 @@ StringRef FileManager::getCanonicalName(const DirectoryEntry *Dir) {
|
|||
SmallString<256> CanonicalNameBuf(CanonicalName);
|
||||
llvm::sys::fs::make_absolute(CanonicalNameBuf);
|
||||
llvm::sys::path::native(CanonicalNameBuf);
|
||||
removeDotPaths(CanonicalNameBuf);
|
||||
removeDotPaths(CanonicalNameBuf, true);
|
||||
char *Mem = CanonicalNameStorage.Allocate<char>(CanonicalNameBuf.size());
|
||||
memcpy(Mem, CanonicalNameBuf.data(), CanonicalNameBuf.size());
|
||||
CanonicalName = StringRef(Mem, CanonicalNameBuf.size());
|
||||
|
|
Loading…
Reference in New Issue