<html><body style="word-wrap: break-word; -webkit-nbsp-mode: space; -webkit-line-break: after-white-space; ">It's very hard to pass arbitrary strings through the Windows CreateProcess API unmolested; Python may not be doing the right thing on your behalf. (.NET doesn't, believe it or not.) This is some Managed C++ to implement the CreateProcess escape algorithm for a single argument:<div><br></div><div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">    <span style="color: #0000ff">void</span> EscapeArg(StringBuilder %sb, String ^arg) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; color: rgb(0, 128, 0); "><span style="color: #000000">        </span>// This looks utterly inane, but is correct.</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">        <span style="color: #0000ff">unsigned</span> quoteCount = 0;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">        <span style="color: #0000ff">for</span> (<span style="color: #0000ff">int</span> i = 0, e = arg->Length; i != e; ++i) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">            <span style="color: #0000ff">wchar_t</span> c = (*arg)[i];</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">            <span style="color: #0000ff">switch</span> (c) {</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                <span style="color: #0000ff">case</span> L<span style="color: #a31515">'"'</span>:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    <span style="color: #0000ff">for</span> (; quoteCount; --quoteCount)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                        sb.Append(L<span style="color: #a31515">"\\\\"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    sb.Append(L<span style="color: #a31515">'\\'</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    sb.Append(c);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    <span style="color: #0000ff">break</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                <span style="color: #0000ff">case</span> L<span style="color: #a31515">'\\'</span>:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    ++quoteCount;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    <span style="color: #0000ff">break</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                <span style="color: #0000ff">default</span>:</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    <span style="color: #0000ff">for</span> (; quoteCount; --quoteCount)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                        sb.Append(L<span style="color: #a31515">'\\'</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    sb.Append(c);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">                    <span style="color: #0000ff">break</span>;</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">            }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">        }</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">        <span style="color: #0000ff">for</span> (; quoteCount; --quoteCount)</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">            sb.Append(L<span style="color: #a31515">"\\\\"</span>);</div><div style="margin-top: 0px; margin-right: 0px; margin-bottom: 0px; margin-left: 0px; font: normal normal normal 9px/normal Helvetica; ">    }</div><div><font class="Apple-style-span" face="Helvetica" size="1"><span class="Apple-style-span" style="font-size: 9px;"><br></span></font></div><div>This is quite dissimilar to the algorithms applicable to Unix shells. (It's also undocumented, perhaps because it's insane.)</div><div><br></div><div><br><div><div>On 2009-08-13, at 20:03, John Thompson wrote:</div><br class="Apple-interchange-newline"><blockquote type="cite"><div>I've been looking into the problem with using grep with search strings<br>with double-quotes.<br><br>I wrote a little C program that just prints out its arguments, so I<br>could see what grep was possibly seeing (though it's argument parsing<br>internally might be different, being an MSYS program).<br><br><blockquote type="cite">From mangle.c, the script is given as:<br></blockquote><br>RUN: dsparg '@"\\01foo"' %t<br><br>In the test report output:<br><br>Command 3: "c:\tools\bin\dsparg.EXE" "@"\\01foo""<br>"C:\Tools\llvm\tools\clang\test\Output\CodeGen\mangle.c.tmp"<br>Command 3 Result: 1<br>Command 3 Output:<br>argc = 3<br>argv[0] = [c:\tools\bin\dsparg.EXE]<br>argv[1] = [@"\\01foo"]<br>argv[2] = [C:\Tools\llvm\tools\clang\test\Output\CodeGen\mangle.c.tmp]<br><br>So, it appears that the search string is getting to the program, but<br>without the single quotes.<br><br>I tried running grep directly from the Windows command line, and this<br>is the only thing that worked:<br><br>C:\Tools\llvm\tools\clang\test\Output\CodeGen>grep '@"\\\\01foo"' mangle.c.tmp<br>@"\01foo" = common global i32 0, align 4                ; <i32*> [#uses=2]<br>        %tmp = load i32* @"\01foo"              ; <i32> [#uses=1]<br>        %tmp1 = load float* bitcast (i32* @"\01foo" to float*)<br> ; <float> [#uses=1]<br><br>The grep program (coming from MSYS) appears to be confused by the<br>embedded quotes, so I'm not sure how to best deal with this.  Some<br>possibilities:<br><br>1. Find a different grep that will work.<br>2. Write or hack a specialized grep to use in the problematic places.<br>3. Make the Python script do the grep.<br>4. Limit the search string to avoid the double-quotes or other<br>problematic characters.  (I.e. look for just \\01foo in the above<br>case).<br>5. Change the test case to avoid having to search for problematic<br>things.  (Probably not an option here, since that format seems common<br>in the LLVM code.)<br>6. Switch to a test mechanism that just compares the output file to a<br>reference file.<br><br>-John<br><br>-- <br>John Thompson<br><a href="mailto:John.Thompson.JTSoftware@gmail.com">John.Thompson.JTSoftware@gmail.com</a><br>_______________________________________________<br>cfe-dev mailing list<br>cfe-dev@cs.uiuc.edu<br>http://lists.cs.uiuc.edu/mailman/listinfo/cfe-dev<br></div></blockquote></div><br></div></div></body></html>