stream.PutChar(GetPrefferedPathSeparator(m_syntax));
}
+ while (IsPathSeparator(new_path[0], m_syntax))
+ new_path++;
+
stream.PutCString(new_path);
const bool resolve = false;
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();
if (::strncmp (it.second.GetCString(), path_cstr, prefixLen) == 0)
{
if (!m_pairs.empty())
{
char orig_path[PATH_MAX];
- char new_path[PATH_MAX];
const size_t orig_path_len = orig_spec.GetPath (orig_path, sizeof(orig_path));
if (orig_path_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);
- if (new_path_len < sizeof(new_path))
- {
- new_spec.SetFile (new_path, true);
- if (new_spec.Exists())
- return true;
- }
+ new_spec.SetFile(pos->second.GetCString(), false);
+ new_spec.AppendPathComponent(orig_path+prefix_len);
+ if (new_spec.Exists())
+ return true;
}
}
}
EXPECT_STREQ("/foo", fs_posix.GetDirectory().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);
fs_windows.AppendPathComponent("baz");
EXPECT_STREQ("F:\\bar\\baz", fs_windows.GetCString());