Change Module::RemapPath to use StringRef.
authorZachary Turner <zturner@google.com>
Fri, 23 Sep 2016 18:42:38 +0000 (18:42 +0000)
committerZachary Turner <zturner@google.com>
Fri, 23 Sep 2016 18:42:38 +0000 (18:42 +0000)
llvm-svn: 282277

lldb/include/lldb/Core/Module.h
lldb/include/lldb/Target/PathMappingList.h
lldb/source/Core/Module.cpp
lldb/source/Plugins/SymbolFile/DWARF/DWARFDebugLine.cpp
lldb/source/Plugins/SymbolFile/DWARF/SymbolFileDWARF.cpp
lldb/source/Target/PathMappingList.cpp

index 55182ca..9d9a60b 100644 (file)
@@ -27,7 +27,9 @@
 #include "lldb/Symbol/TypeSystem.h"
 #include "lldb/Target/PathMappingList.h"
 #include "lldb/lldb-forward.h"
+
 #include "llvm/ADT/DenseSet.h"
+#include "llvm/ADT/StringRef.h"
 
 namespace lldb_private {
 
@@ -953,7 +955,8 @@ public:
   ///     /b true if \a path was successfully located and \a new_path
   ///     is filled in with a new source path, \b false otherwise.
   //------------------------------------------------------------------
-  bool RemapSourceFile(const char *path, std::string &new_path) const;
+  bool RemapSourceFile(llvm::StringRef path, std::string &new_path) const;
+  bool RemapSourceFile(const char *, std::string &) const = delete;
 
   //----------------------------------------------------------------------
   /// @class LookupInfo Module.h "lldb/Core/Module.h"
index 048f44a..4e5a569 100644 (file)
@@ -87,7 +87,8 @@ public:
   ///     /b true if \a path was successfully located and \a new_path
   ///     is filled in with a new source path, \b false otherwise.
   //------------------------------------------------------------------
-  bool RemapPath(const char *path, std::string &new_path) const;
+  bool RemapPath(llvm::StringRef path, std::string &new_path) const;
+  bool RemapPath(const char *, std::string &) const = delete;
 
   bool ReverseRemapPath(const ConstString &path, ConstString &new_path) const;
 
index 765f715..1c3ab6d 100644 (file)
@@ -1635,7 +1635,8 @@ bool Module::FindSourceFile(const FileSpec &orig_spec,
   return m_source_mappings.FindFile(orig_spec, new_spec);
 }
 
-bool Module::RemapSourceFile(const char *path, std::string &new_path) const {
+bool Module::RemapSourceFile(llvm::StringRef path,
+                             std::string &new_path) const {
   std::lock_guard<std::recursive_mutex> guard(m_mutex);
   return m_source_mappings.RemapPath(path, new_path);
 }
index d3f4d24..bce21c4 100644 (file)
@@ -462,7 +462,7 @@ bool DWARFDebugLine::ParseSupportFiles(
 
   for (uint32_t file_idx = 1;
        prologue.GetFile(file_idx, cu_comp_dir, file_spec); ++file_idx) {
-    if (module_sp->RemapSourceFile(file_spec.GetCString(), remapped_file))
+    if (module_sp->RemapSourceFile(file_spec.GetPath(), remapped_file))
       file_spec.SetFile(remapped_file, false);
     support_files.Append(file_spec);
   }
index 92e513d..36f3162 100644 (file)
@@ -746,7 +746,7 @@ lldb::CompUnitSP SymbolFileDWARF::ParseCompileUnit(DWARFCompileUnit *dwarf_cu,
               }
 
               std::string remapped_file;
-              if (module_sp->RemapSourceFile(cu_file_spec.GetCString(),
+              if (module_sp->RemapSourceFile(cu_file_spec.GetPath(),
                                              remapped_file))
                 cu_file_spec.SetFile(remapped_file, false);
             }
index 4df3a18..90fff57 100644 (file)
@@ -136,7 +136,8 @@ void PathMappingList::Clear(bool notify) {
 bool PathMappingList::RemapPath(const ConstString &path,
                                 ConstString &new_path) const {
   const char *path_cstr = path.GetCString();
-
+  // CLEANUP: Convert this function to use StringRefs internally instead
+  // of raw c-strings.
   if (!path_cstr)
     return false;
 
@@ -154,19 +155,19 @@ bool PathMappingList::RemapPath(const ConstString &path,
   return false;
 }
 
-bool PathMappingList::RemapPath(const char *path, std::string &new_path) const {
-  if (m_pairs.empty() || path == nullptr || path[0] == '\0')
+bool PathMappingList::RemapPath(llvm::StringRef path,
+                                std::string &new_path) const {
+  if (m_pairs.empty() || path.empty())
     return false;
 
   const_iterator pos, end = m_pairs.end();
   for (pos = m_pairs.begin(); pos != end; ++pos) {
-    const size_t prefix_len = pos->first.GetLength();
+    if (!path.consume_front(pos->first.GetStringRef()))
+      continue;
 
-    if (::strncmp(pos->first.GetCString(), path, prefix_len) == 0) {
-      new_path = pos->second.GetCString();
-      new_path.append(path + prefix_len);
-      return true;
-    }
+    new_path = pos->second.GetStringRef();
+    new_path.append(path);
+    return true;
   }
   return false;
 }