X-Recipient: archive-cygwin AT delorie DOT com X-SWARE-Spam-Status: No, hits=-2.6 required=5.0 tests=AWL,BAYES_00 X-Spam-Check-By: sourceware.org Message-ID: <807497.26686.qm@web88304.mail.re4.yahoo.com> X-RocketYMMF: ilatypov Date: Thu, 18 Feb 2010 19:22:26 -0800 (PST) From: Ilguiz Latypov Subject: Re: CreateProcess() - executed program gets different argument depending if it's compiled with gcc (cygwin) or cl (VS)? To: cygwin AT cygwin DOT com Cc: Piotr Krukowiecki MIME-Version: 1.0 Content-Type: multipart/mixed; boundary="0-379910768-1266549746=:26686" Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm List-Id: List-Subscribe: List-Archive: List-Post: List-Help: , Sender: cygwin-owner AT cygwin DOT com Mail-Followup-To: cygwin AT cygwin DOT com Delivered-To: mailing list cygwin AT cygwin DOT com --0-379910768-1266549746=:26686 Content-Type: text/plain; charset=us-ascii > As you can see dumpargs_gcc receives "\127.0.0.127\foo.cxx" and dumpargs_cl receives "\\127.0.0.127\foo.cxx". Interesting. I am confused, too. (1) Native-only parameter passing: execv(PROG, ARGV) -> MSVCRT -> line = M(ARGV) -> CreateProcess( PROG, line, .. ) -> MSVCRT -> CommandLineToArgvW( line ) -> argv, argc = M'( line ) -> int main( int argc, char *argv[] ) http://msdn.microsoft.com/en-us/library/17w5ykft.aspx (2) POSIX compatibility wrapper (Cygwin): execv(PROG, ARGV) -> Cygwin DLL -> prog = W(PROG), line = C(ARGV) -> CreateProcess( prog, line, .. ) (a) PROG is a native program: -> MSVCRT -> CommandLineToArgvW( line ) -> argc, argv = M'( line ) -> int main( int argc, char *argv[] ) (b) PROG is another Cygwin-linked program: -> Cygwin stub (crt0?) -> argc, argv = C'( line ) -> int main( int argc, char *argv[] ) Thanks to your createprocess.c/dumpargs.c pair, I could figure the existing Cygwin's parsing without looking into its source code. It turned to ignore the escaping power of a bare (unquoted) backslash when it was followed by a double quote, which is against both MSVC and Bash rules. Here is my understanding of expansion features of Win32 (M), Bash (B) and Cygwin (C) shown as a diagram, where "special character" means a dollar sign [$], a double quote ["], another backslash [\], backquote [`] or a newline, as explained in section 2.2.3 Double-Quotes of the Open Group's XCU document. http://www.opengroup.org/onlinepubs/009695399/utilities/xcu_chap02.html Bare backslashes Bare backslashes Quoted backslashes Quoted backslashes not followed by a followed by a not followed by a followed by a double quote double quote special character special character MSVC regular protecting regular regular Bash protecting protecting regular protecting Cygwin regular protecting regular protecting So I guess the confusion remains as to why (a) C != M and (b) C != B. --0-379910768-1266549746=:26686 Content-Type: text/plain; name="createprocess.c" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="createprocess.c" I2luY2x1ZGUgPHdpbmRvd3MuaD4KI2luY2x1ZGUgPHN0ZGlvLmg+Cgp2b2lk IHJ1bkNvbW1hbmQoY2hhciAqIGNvbW1hbmQpIHsKICAgIFNUQVJUVVBJTkZP IHNpOwogICAgUFJPQ0VTU19JTkZPUk1BVElPTiBwaTsKCiAgICBaZXJvTWVt b3J5KCZwaSwgc2l6ZW9mKHBpKSk7CiAgICBaZXJvTWVtb3J5KCZzaSwgc2l6 ZW9mKHNpKSk7CiAgICBzaS5jYiA9IHNpemVvZihzaSk7CgogICAgcHJpbnRm KCJcbkNvbW1hbmQ6ICVzXG4iLCBjb21tYW5kKTsKCiAgICBDcmVhdGVQcm9j ZXNzQShOVUxMLCBjb21tYW5kLCBOVUxMLCBOVUxMLCBUUlVFLCAwLCBOVUxM LCBOVUxMLCAmc2ksICZwaSk7CiAgICBXYWl0Rm9yU2luZ2xlT2JqZWN0KHBp LmhQcm9jZXNzLCBJTkZJTklURSk7CgogICAgQ2xvc2VIYW5kbGUoIHBpLmhQ cm9jZXNzICk7CiAgICBDbG9zZUhhbmRsZSggcGkuaFRocmVhZCApOwogICAg ZmZsdXNoKCBzdGRvdXQgKTsgICAgICAgICAgIC8vIGluc3VmZmljaWVudCB3 aGVuIG1haW4oKSBpcyBjYWxsZWQgZnJvbSBDeWd3aW4gYmFzaDsgYWRkZWQg c2V0YnVmKCkKICAgIGZmbHVzaCggc3RkZXJyICk7ICAgICAgICAgICAvLwp9 CgoKLy8gWyAiXFxhXGIiICAiY1xcZCIgIlxlXGYiICJcXFxcZ1xcaCIgICJR VU9URUQgV09SRFMiIFdPXCJSRCBcXGFcYiBcXCJhXGIiIFxcYVwiYiBcXFxc ImEgXFxcXFwiIGIiIF0KLy8gWyAiXFxhXGIiICAiY1xcZCIgIlxlXGYiICJc XFxcZ1xcaCIgICJRVU9URUQgV09SRFMiIFdPXCJSRCB4IiBcXGFcYiBcXCJh XGIiIFxcYVwiYiB4IiBcXFxcImEgXFxcXFwiIGIiIF0KLy8gVGhlIHNlY29u ZCBsaW5lIGNvbXBlbnNhdGVzIEN5Z3dpbidzIGludGVycHJldGF0aW9uIG9m IGEgYmFyZSAodW5xdW90ZWQpCi8vIGJhY2tzbGFzaCBmb2xsb3dlZCBieSBh IGRvdWJsZSBxdW90ZSBhcyB0d28gc2VwYXJhdGUgY2hhcmFjdGVycy4KCiNk ZWZpbmUgQ09NTUFORF9BUkdTICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAiIFwiXFxcXGFcXGJcIiAgXCJjXFxcXGRcIiBcIlxcZVxcZlwiIFwiXFxc XFxcXFxnXFxcXGhcIiAgXCJRVU9URUQgV09SRFNcIiBXT1xcXCJSRCIgXAog ICAgIiBcXFxcYVxcYiBcXFxcXCJhXFxiXCIgXFxcXGFcXFwiYiIgXAogICAg IiBcXFxcXFxcXFwiYSBcXFxcXFxcXFxcXCIgYlwiICIKI2RlZmluZSBDT01N QU5EX0FSR1NfQ1lHV0lOX0JBUkVfQkFDS1NMQVNIX1FVT1RFICIgXCJcXFxc YVxcYlwiICBcImNcXFxcZFwiIFwiXFxlXFxmXCIgXCJcXFxcXFxcXGdcXFxc aFwiICBcIlFVT1RFRCBXT1JEU1wiIFdPXFxcIlJEIHhcIiIgXAogICAgIiBc XFxcYVxcYiBcXFxcXCJhXFxiXCIgXFxcXGFcXFwiYiB4XCIiIFwKICAgICIg XFxcXFxcXFxcImEgXFxcXFxcXFxcXFwiIGJcIiAiCgppbnQgbWFpbigpIHsK ICAgIHNldGJ1Ziggc3Rkb3V0LCBOVUxMICk7ICAgICAvLyBqdXN0IGZsdXNo aW5nIHRoZXNlIGZpbGVzIGFwcGVhcnMgdG8gYmUgaW5zdWZmaWNpZW50CiAg ICBzZXRidWYoIHN0ZGVyciwgTlVMTCApOyAgICAgLy8KCiAgICBydW5Db21t YW5kKCIuXFxkdW1wYXJnc19nY2MuZXhlICIgQ09NTUFORF9BUkdTX0NZR1dJ Tl9CQVJFX0JBQ0tTTEFTSF9RVU9URSk7CiAgICBydW5Db21tYW5kKCIuXFxk dW1wYXJnc19jbC5leGUgIiBDT01NQU5EX0FSR1MpOwogICAgcmV0dXJuIDA7 Cn0KCg== --0-379910768-1266549746=:26686 Content-Type: text/plain; name="createprocess_cl.txt" Content-Transfer-Encoding: base64 Content-Disposition: attachment; filename="createprocess_cl.txt" JCAuL2NyZWF0ZXByb2Nlc3NfY2wuZXhlIAoKQ29tbWFuZDogLlxkdW1wYXJn c19nY2MuZXhlICAiXFxhXGIiICAiY1xcZCIgIlxlXGYiICJcXFxcZ1xcaCIg ICJRVU9URUQgV09SRFMiIFdPXCJSRCB4IiBcXGFcYiBcXCJhXGIiIFxcYVwi YiB4IiBcXFxcImEgXFxcXFwiIGIiIAouL2R1bXBhcmdzX2djYwpcYVxiCmNc ZApcZVxmClxcZ1xoClFVT1RFRCBXT1JEUwpXT1xSRCB4ClxcYVxiClxhXGIK XGFcYiB4ClxcYSBcXCIgYgoKQ29tbWFuZDogLlxkdW1wYXJnc19jbC5leGUg ICJcXGFcYiIgICJjXFxkIiAiXGVcZiIgIlxcXFxnXFxoIiAgIlFVT1RFRCBX T1JEUyIgV09cIlJEIFxcYVxiIFxcImFcYiIgXFxhXCJiIFxcXFwiYSBcXFxc XCIgYiIgCi5cZHVtcGFyZ3NfY2wuZXhlClxcYVxiCmNcXGQKXGVcZgpcXFxc Z1xcaApRVU9URUQgV09SRFMKV08iUkQKXFxhXGIKXGFcYgpcXGEiYgpcXGEg XFwiIGIKCgoKJCBmb3IgdyBpbiAiXFxhXGIiICAiY1xcZCIgIlxlXGYiICJc XFxcZ1xcaCIgICJRVU9URUQgV09SRFMiIFdPXCJSRCBcXGFcYiBcXCJhXGIi IFxcYVwiYiBcXFxcImEgXFxcXFwiIGIiIDsgZG8gZWNobyAiJHciIDsgZG9u ZQpcYVxiCmNcZApcZVxmClxcZ1xoClFVT1RFRCBXT1JEUwpXTyJSRApcYWIK XGFcYgpcYSJiClxcYSBcXCIgYgoK --0-379910768-1266549746=:26686 Content-Type: text/plain; charset=us-ascii -- Problem reports: http://cygwin.com/problems.html FAQ: http://cygwin.com/faq/ Documentation: http://cygwin.com/docs.html Unsubscribe info: http://cygwin.com/ml/#unsubscribe-simple --0-379910768-1266549746=:26686--