X-Recipient: archive-cygwin@delorie.com
DomainKey-Signature: a=rsa-sha1; c=nofws; d=sourceware.org; h=list-id
	:list-unsubscribe:list-subscribe:list-archive:list-post
	:list-help:sender:from:to:references:in-reply-to:subject:date
	:message-id:mime-version:content-type:content-transfer-encoding;
	 q=dns; s=default; b=lj8FHX8FlaDHRiJHOXgEwsj7Or7eIiEHSgebMd1nAAc
	VLpk+qLbkDchY6R1EQ65dIyB7l4xws9qfR1Ef5croTGgQc3azLyVe4BlYSHwxVs8
	uiOyLWGf1bdm5EfVrtKuUG/5VRauwTxlLxinoNb3C+ScbB+oJoWqNyenZnN8uTpE
	=
DKIM-Signature: v=1; a=rsa-sha1; c=relaxed; d=sourceware.org; h=list-id
	:list-unsubscribe:list-subscribe:list-archive:list-post
	:list-help:sender:from:to:references:in-reply-to:subject:date
	:message-id:mime-version:content-type:content-transfer-encoding;
	 s=default; bh=rdzwsOf5MVu1USQ73bU2XLZvzBA=; b=N/K3c0cnPxDKW9rC1
	9UjyoWM3wqgdf3VvPzYPOSt6huKBiwCMvJgrs/02pzAKRoqcXx2ycl+xgRTpSQcK
	yjeiOG0yTqU5kkF609YHSHqEa/JGEpCxeNjbfX9gZNa9xup0mH6tu+R6cdwEdp/n
	KzfLYqniIvQMFmoN5f6u0QdMKc=
Mailing-List: contact cygwin-help@cygwin.com; run by ezmlm
List-Id: <cygwin.cygwin.com>
List-Subscribe: <mailto:cygwin-subscribe@cygwin.com>
List-Archive: <http://sourceware.org/ml/cygwin/>
List-Post: <mailto:cygwin@cygwin.com>
List-Help: <mailto:cygwin-help@cygwin.com>, <http://sourceware.org/ml/#faqs>
Sender: cygwin-owner@cygwin.com
Mail-Followup-To: cygwin@cygwin.com
Delivered-To: mailing list cygwin@cygwin.com
Authentication-Results: sourceware.org; auth=none
X-Virus-Found: No
X-Spam-SWARE-Status: No, score=0.9 required=5.0 tests=BAYES_50,RCVD_IN_DNSWL_LOW,SPF_NEUTRAL autolearn=ham version=3.3.2 spammy=D*o, callee.exe, fo@o, commandLine
X-HELO: outmail149082.authsmtp.co.uk
From: "David Allsopp" <dra27@cantab.net>
To: "'Peter Rosin'" <peda@lysator.liu.se>, <cygwin@cygwin.com>
References: <005c01d1a6e2$30270ba0$907522e0$@metastack.com> <CACoZoo1LObZ0zu9X5O6dV4cO4jN+GO28bdRbuDkTMdaKHXpVbQ@mail.gmail.com> <000101d1a76d$c37c6b80$4a754280$@metastack.com> <967954968.20160506172040@yandex.ru> <006301d1a834$6ccd1380$46673a80$@cantab.net> <6e1f2ba2-0c8e-4659-4c5a-d748e90c1ced@lysator.liu.se>
In-Reply-To: <6e1f2ba2-0c8e-4659-4c5a-d748e90c1ced@lysator.liu.se>
Subject: RE: Formatting command line arguments when starting a Cygwin process from a native process
Date: Mon, 9 May 2016 16:49:42 +0100
Message-ID: <008e01d1aa0a$67a9ef40$36fdcdc0$@cantab.net>
MIME-Version: 1.0
Content-Type: text/plain;	charset="us-ascii"
Content-Transfer-Encoding: 7bit
X-Server-Quench: a6825b07-15fd-11e6-829e-00151795d556
X-AuthReport-Spam: If SPAM / abuse - report it at: http://www.authsmtp.com/abuse
X-AuthRoute: OCd1ZAARAlZZVg1A VQsPBSlcQA9jIBBQ FxoeKRdbOF4EFV4Q JB4LaX9aIRpGHQgH E2cNUVBdWll1F2F0 aBRQbQBDYEtMQQRr VFdLR01TWkBsCGpf XkZBUhFxdQxDNntw bEQsD3ZTXkEodUFg Q0sCQXAHZDJmdWgd WRVFdwNVdQJNdxoR b1V5GhF4a3VxOTg9 FhMvPjY+dT5YLSFc RA1FKVMUTA4CBDEh Qh0EAS5nAk0IQW0o MxU8Nl8aEw4Yem4j PkQgXxoAKRgZBxZF V09XByoRLhEHTjYq Ew4SRVQZGzBGWk9e
X-Authentic-SMTP: 61633634383431.1037:706
X-AuthFastPath: 0 (Was 255)
X-AuthSMTP-Origin: 213.105.212.114/25
X-AuthVirus-Status: No virus detected - but ensure you scan with your own anti-virus system.
X-IsSubscribed: yes

Hi!

Peter Rosin wrote:
> I think cygwin emulates posix shell style command line parsing when
> invoked from a Win32 process (like you do). So, try single quotes:
> 
> commandLine = "callee.exe \"@\"te\"\n\"st fo@o bar\" \"baz baz '*'
> '\"\\'\"'";
> 
> I get this (w/o noglob):
> 
> argc = 7
> argv[0] = callee
> argv[1] = @te
> st
> argv[2] = fo@o
> argv[3] = bar baz
> argv[4] = baz
> argv[5] = *
> argv[6] = "'"

Yes, that seems to be approximately the way I arrived at too - my concern
with all the extra quoting is then hitting the Windows limit on command line
length (I'd like to avoid needing @response files as much as possible). So
with various experimenting, the slightly odd scheme I've come up with is
that if none of the arguments contain double-quote characters, then set
noglob and use the quoting mechanism previously described (so whitespace
within an argument or an @ at the beginning of an argument needing
double-quoting) and if a double-quote character appears in any of the
arguments, then don't set noglob and escape every argument with
double-quotes (to avoid globbing) - any double-quote characters within can
then be escaped with "'"'" (i.e. terminate the current quote string,
single-quote a double-quote and then resume a quote string!). Messy, but
that seems to be about the only way...


David 


--
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

