Author: jingham
Date: Tue Aug 23 12:13:33 2016
New Revision: 279533

URL: http://llvm.org/viewvc/llvm-project?rev=279533&view=rev
Log:
Change the PathMappingList::FindFile to use FileSpec API's

Also, when appending path components, collapse multiple "/" into one at the 
join.

Modified:
    lldb/trunk/source/Host/common/FileSpec.cpp
    lldb/trunk/source/Target/PathMappingList.cpp
    lldb/trunk/unittests/Host/FileSpecTest.cpp

Modified: lldb/trunk/source/Host/common/FileSpec.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Host/common/FileSpec.cpp?rev=279533&r1=279532&r2=279533&view=diff
==============================================================================
--- lldb/trunk/source/Host/common/FileSpec.cpp (original)
+++ lldb/trunk/source/Host/common/FileSpec.cpp Tue Aug 23 12:13:33 2016
@@ -1552,6 +1552,9 @@ FileSpec::AppendPathComponent(const char
             stream.PutChar(GetPrefferedPathSeparator(m_syntax));
     }
 
+    while (IsPathSeparator(new_path[0], m_syntax))
+        new_path++;
+
     stream.PutCString(new_path);
 
     const bool resolve = false;

Modified: lldb/trunk/source/Target/PathMappingList.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/source/Target/PathMappingList.cpp?rev=279533&r1=279532&r2=279533&view=diff
==============================================================================
--- lldb/trunk/source/Target/PathMappingList.cpp (original)
+++ lldb/trunk/source/Target/PathMappingList.cpp Tue Aug 23 12:13:33 2016
@@ -224,6 +224,7 @@ PathMappingList::ReverseRemapPath (const
 
     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)
         {
@@ -242,7 +243,6 @@ PathMappingList::FindFile (const FileSpe
     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)
         {
@@ -255,13 +255,10 @@ PathMappingList::FindFile (const FileSpe
                 {
                     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;
                     }
                 }
             }

Modified: lldb/trunk/unittests/Host/FileSpecTest.cpp
URL: 
http://llvm.org/viewvc/llvm-project/lldb/trunk/unittests/Host/FileSpecTest.cpp?rev=279533&r1=279532&r2=279533&view=diff
==============================================================================
--- lldb/trunk/unittests/Host/FileSpecTest.cpp (original)
+++ lldb/trunk/unittests/Host/FileSpecTest.cpp Tue Aug 23 12:13:33 2016
@@ -69,6 +69,12 @@ TEST(FileSpecTest, AppendPathComponent)
     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());


_______________________________________________
lldb-commits mailing list
lldb-commits@lists.llvm.org
http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits

Reply via email to