www.delorie.com/archives/browse.cgi   search  
Mail Archives: cygwin/2010/02/18/22:22:40

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 <ilatypov AT infradead DOT org>
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 <piotr DOT krukowiecki DOT news AT gmail DOT com>
MIME-Version: 1.0
Mailing-List: contact cygwin-help AT cygwin DOT com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe AT cygwin DOT com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin AT cygwin DOT com>
List-Help: <mailto:cygwin-help AT cygwin DOT com>, <http://sourceware.org/ml/#faqs>
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--

- Raw text -


  webmaster     delorie software   privacy  
  Copyright © 2019   by DJ Delorie     Updated Jul 2019