forked from OSchip/llvm-project
Change the PathMappingList::FindFile to use FileSpec API's
Also, when appending path components, collapse multiple "/" into one at the join. llvm-svn: 279533
This commit is contained in:
parent
9ec5a61358
commit
291fd35044
|
|
@ -1552,6 +1552,9 @@ FileSpec::AppendPathComponent(const char *new_path)
|
||||||
stream.PutChar(GetPrefferedPathSeparator(m_syntax));
|
stream.PutChar(GetPrefferedPathSeparator(m_syntax));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
while (IsPathSeparator(new_path[0], m_syntax))
|
||||||
|
new_path++;
|
||||||
|
|
||||||
stream.PutCString(new_path);
|
stream.PutCString(new_path);
|
||||||
|
|
||||||
const bool resolve = false;
|
const bool resolve = false;
|
||||||
|
|
|
||||||
|
|
@ -224,6 +224,7 @@ PathMappingList::ReverseRemapPath (const ConstString &path, ConstString &new_pat
|
||||||
|
|
||||||
for (const auto& it : m_pairs)
|
for (const auto& it : m_pairs)
|
||||||
{
|
{
|
||||||
|
// FIXME: This should be using FileSpec API's to do the path appending.
|
||||||
const size_t prefixLen = it.second.GetLength();
|
const size_t prefixLen = it.second.GetLength();
|
||||||
if (::strncmp (it.second.GetCString(), path_cstr, prefixLen) == 0)
|
if (::strncmp (it.second.GetCString(), path_cstr, prefixLen) == 0)
|
||||||
{
|
{
|
||||||
|
|
@ -242,7 +243,6 @@ PathMappingList::FindFile (const FileSpec &orig_spec, FileSpec &new_spec) const
|
||||||
if (!m_pairs.empty())
|
if (!m_pairs.empty())
|
||||||
{
|
{
|
||||||
char orig_path[PATH_MAX];
|
char orig_path[PATH_MAX];
|
||||||
char new_path[PATH_MAX];
|
|
||||||
const size_t orig_path_len = orig_spec.GetPath (orig_path, sizeof(orig_path));
|
const size_t orig_path_len = orig_spec.GetPath (orig_path, sizeof(orig_path));
|
||||||
if (orig_path_len > 0)
|
if (orig_path_len > 0)
|
||||||
{
|
{
|
||||||
|
|
@ -255,10 +255,8 @@ PathMappingList::FindFile (const FileSpec &orig_spec, FileSpec &new_spec) const
|
||||||
{
|
{
|
||||||
if (::strncmp (pos->first.GetCString(), orig_path, prefix_len) == 0)
|
if (::strncmp (pos->first.GetCString(), orig_path, prefix_len) == 0)
|
||||||
{
|
{
|
||||||
const size_t new_path_len = snprintf(new_path, sizeof(new_path), "%s/%s", pos->second.GetCString(), orig_path + prefix_len);
|
new_spec.SetFile(pos->second.GetCString(), false);
|
||||||
if (new_path_len < sizeof(new_path))
|
new_spec.AppendPathComponent(orig_path+prefix_len);
|
||||||
{
|
|
||||||
new_spec.SetFile (new_path, true);
|
|
||||||
if (new_spec.Exists())
|
if (new_spec.Exists())
|
||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
@ -266,7 +264,6 @@ PathMappingList::FindFile (const FileSpec &orig_spec, FileSpec &new_spec) const
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
|
||||||
new_spec.Clear();
|
new_spec.Clear();
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -69,6 +69,12 @@ TEST(FileSpecTest, AppendPathComponent)
|
||||||
EXPECT_STREQ("/foo", fs_posix.GetDirectory().GetCString());
|
EXPECT_STREQ("/foo", fs_posix.GetDirectory().GetCString());
|
||||||
EXPECT_STREQ("bar", fs_posix.GetFilename().GetCString());
|
EXPECT_STREQ("bar", fs_posix.GetFilename().GetCString());
|
||||||
|
|
||||||
|
FileSpec fs_posix_2("/foo", false, FileSpec::ePathSyntaxPosix);
|
||||||
|
fs_posix_2.AppendPathComponent("//bar/baz");
|
||||||
|
EXPECT_STREQ("/foo/bar/baz", fs_posix_2.GetCString());
|
||||||
|
EXPECT_STREQ("/foo/bar", fs_posix_2.GetDirectory().GetCString());
|
||||||
|
EXPECT_STREQ("baz", fs_posix_2.GetFilename().GetCString());
|
||||||
|
|
||||||
FileSpec fs_windows("F:\\bar", false, FileSpec::ePathSyntaxWindows);
|
FileSpec fs_windows("F:\\bar", false, FileSpec::ePathSyntaxWindows);
|
||||||
fs_windows.AppendPathComponent("baz");
|
fs_windows.AppendPathComponent("baz");
|
||||||
EXPECT_STREQ("F:\\bar\\baz", fs_windows.GetCString());
|
EXPECT_STREQ("F:\\bar\\baz", fs_windows.GetCString());
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue