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. [...]
Sure.
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.)
-- E-gards: Jimmy