[Geany-Devel] Placeholder replacement in (build) commands
dimitar.zhekov at xxxxx
Fri Apr 3 16:16:45 UTC 2015
On 03.4.2015 г. 03:52, Lex Trotman wrote:
>> To find proper quoting for Windows, you'll need to look no further than
>> spawn_append_argument() in the new spawn. :)
> Well, thats obviously the name of a quoting function, perhaps it
> should be spawn_append_argument_win_quoted() so I might have noticed
> it :)
> Its fine for appending an argument, but when replacing a placeholder
> you can't be certain it isn't inside quotes already. [...]
> But it doesn't put arguments containing tabs inside " either.
If you mean spawn_append_argument, it checks for at least one " or
g_ascii_isspace(), and if so, quotes the entire argument. There's no way
it'll miss a tab.
>> The only thing I'm not sure about are \n \v ... - the official VS 2013 msdn
>> says "arguments are delimited by white space, which is either a space or
>> a tab", [...]
> It puts arguments containing \n and \v inside " which sounds
> reasonable but yeah unexplained why.
Actually, I confused the blanks which *may* cause quoting with the ones
should delimit the program name. The former set must be permissive to
cope with stupid RTL-s, while the latter must be restrictive to avoid
Win~1 to avoid running unexpected things.
So the actual blog error is that '\f' and especially '\r' are not
included. But I'm not much better: after checking g_ascii_isspace(), it
turns out that '\v' is not a spacing character for glib, despite both C
and C++ standards saying it is. *facepalm*
"Everyone quotes command line arguments the wrong way" - truer words
have never been said. I'll switch to isspace(), and even if it considers
some non-ascii characters to be spaces, that'll do no harm.
(I can even quote unconditionally - the resulting CL will be a bit ugly,
but it's internal to spawn anyway.)
More information about the Devel