Aaron Digulla wrote: > > Am Samstag, 07. Mai 2016 09:45 CEST, "David Allsopp" <dr...@cantab.net> > schrieb: > > > > > Then all you need is a rudimentary quoting. > > > > Yes, but the question still remains what that rudimentary quoting is - > i.e. > > I can see how to quote spaces which appear in elements of argv, but I > > cannot see how to quote double quotes! > > This should help: > https://blogs.msdn.microsoft.com/twistylittlepassagesallalike/2011/04/23/e > veryone-quotes-command-line-arguments-the-wrong-way/
This provides documentation for how Microsoft implementations do it, not how Cygwin does it. The Cygwin DLL is responsible for determining how a Cygwin process gets argc and argv from GetCommandLineW. > My line of thought is that Cygwin can't get anything which Windows can't > send it. So the first step to solve this mess is to make sure the > arguments which you send to CreateProcess() are correct. > > The next step would be to write a small C utility which dumps it's > arguments, so you can properly debug all kinds of characters. See later email, but IMHO the conversion is something Cygwin should have precisely documented, not determined by brittle experimentation. > PS: I always point people to string list/array type methods to create > processes which fix all the problems with spaces and odd characters > (quotes, umlauts, etc). It seems that Windows doesn't have such a method > to create processes. Which kind of makes sense; Windows is very, very > mouse centered. I fail to see the connection with mice! What Windows (NT) does have is a legacy where the decision on how to convert a command line to a list/array of arguments is determined per-process (and so not the responsibility of command line shells) vs Unix which puts the burden of converting a single command line to the array on the shell instead. Nominally, the Windows way is more flexible, though I don't think that flexibility is actually useful (especially if you look at the comments in the command line -> argv conversion in Microsoft's C Runtime library!). David