<div dir="ltr">Rather than all of this ugly error-prone code, can we instead use llvm::sys::fs::root_name to check whether the path contains a drive letter?</div><br><div class="gmail_quote"><div dir="ltr">On Tue, Aug 18, 2015 at 1:52 PM Dawn Perchik via lldb-commits <<a href="mailto:lldb-commits@lists.llvm.org">lldb-commits@lists.llvm.org</a>> wrote:<br></div><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">dawn created this revision.<br>
dawn added reviewers: abidh, ki.stfu, brucem.<br>
dawn added a subscriber: lldb-commits.<br>
dawn set the repository for this revision to rL LLVM.<br>
<br>
This fixes -data-info-line to parse the filename and line correctly when LineEntry doesn't have the optional column number and the filename contains a Windows drive letter.<br>
<br>
Repository:<br>
  rL LLVM<br>
<br>
<a href="http://reviews.llvm.org/D12115" rel="noreferrer" target="_blank">http://reviews.llvm.org/D12115</a><br>
<br>
Files:<br>
  tools/lldb-mi/MICmdCmdData.cpp<br>
<br>
Index: tools/lldb-mi/MICmdCmdData.cpp<br>
===================================================================<br>
--- tools/lldb-mi/MICmdCmdData.cpp<br>
+++ tools/lldb-mi/MICmdCmdData.cpp<br>
@@ -1754,8 +1754,15 @@<br>
             const size_t nFileStartPos = rLine.find_first_not_of(' ', nEndAddressEndPos + 2);<br>
             const size_t nFileOrLineEndPos = rLine.rfind(':');<br>
             const size_t nFileOrLineStartPos = rLine.rfind(':', nFileOrLineEndPos - 1);<br>
-            const size_t nFileEndPos = nFileStartPos < nFileOrLineStartPos ? nFileOrLineStartPos : nFileOrLineEndPos;<br>
-            const size_t nFileLen = nFileEndPos - nFileStartPos;<br>
+            size_t nFileEndPos = nFileStartPos < nFileOrLineStartPos ? nFileOrLineStartPos : nFileOrLineEndPos;<br>
+            size_t nFileLen = nFileEndPos - nFileStartPos;<br>
+            if ((nFileLen == 1) && ((rLine.at(nFileEndPos + 1) == '\\') || (rLine.at(nFileEndPos + 1) == '/')))<br>
+            {<br>
+                // The filename contains a Windows drive letter; recalculate<br>
+                // nFileEndPos and nFileLen to account for it.<br>
+                nFileEndPos = nFileOrLineEndPos;<br>
+                nFileLen = nFileEndPos - nFileStartPos;<br>
+            }<br>
             const CMIUtilString strFile(rLine.substr(nFileStartPos, nFileLen).c_str());<br>
             const CMICmnMIValueConst miValueConst3(strFile);<br>
             const CMICmnMIValueResult miValueResult3("file", miValueConst3);<br>
<br>
<br>
_______________________________________________<br>
lldb-commits mailing list<br>
<a href="mailto:lldb-commits@lists.llvm.org" target="_blank">lldb-commits@lists.llvm.org</a><br>
<a href="http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits" rel="noreferrer" target="_blank">http://lists.llvm.org/cgi-bin/mailman/listinfo/lldb-commits</a><br>
</blockquote></div>