From: Keith M. <kei...@us...> - 2008-01-11 20:55:20
|
On Fri, 2008-01-11 at 18:11 +0100, Michael Kappert wrote: > I already asked about this on mingw-users > (news://news.gmane.org:119/478...@gm...) > but I think it's more properly handled here. Thanks to Dave and > Earnie for their help so far. I'd already seen your post there, but hadn't gotten around to replying. You are correct; this probably is a more appropriate forum for this discussion. > My preferred solution would be to drop the automagic conversion > completely as it doesn't seem to work at all. Oh, but it does! About 99 times out of 100, it does exactly what you want; you are unfortunate that your particular usage falls into the 1% band, where it fails. > But maybe that's not feasible for reasons I don't see? Comments? There is no way around this, in present versions of MSYS; for the time being, Cygwin may be a better choice for your needs. However, the problem is known, and there had been some discussion of possible solutions, when it was originally reported. At the time, Earnie was the MSYS maintainer, and he proposed some possible features that might help to alleviate the problem:-- 1) Create an environment variable, which could be set to particular values, to control the behaviour of the transformation; that would allow you to disable the transformation, as you suggest. 2) Prefix some specific signature to the argument string itself, which MSYS would remove, recognising it as an instruction to leave the string otherwise unmodified. Of these two, I personally prefer the second, since it will allow finer control of the behaviour. Consider the problem, using the example which you originally presented:-- $ ./test "(../src) (foo::bar)" test: (..\src) (foo;bar) =========^=========^==== As you noticed, MSYS mistakenly identifies this as a path list, in POSIX format, and "helpfully" converts it to its Woe32 equivalent form; also, there seems to be no way to persuade MSYS to pass that string on, as you really wanted it. However, look what happens, if you make a very small alteration to that string:-- $ ./test "?:(../src) (foo::bar)" test: ?:(../src) (foo::bar) ======^^===^=========^^==== Close to what you want, but not quite there. However, if the MSYS path transformation code could be modified, such that one initial `?:' on any argument string is discarded, while leaving the remainder of the string untouched, wouldn't that give you the desired effect? This is certainly how I would propose dealing with this problem; I've even considered working on a patch to implement it, but it's currently way down on my priority list. In any case, it would be up to Cesar, whether or not he would consider such a patch, before the upcoming release of MSYS-1.0.11, or whether to wait for MSYS-1.0.12. Additionally, while I've suggested `?:' as the signature tag, the user population should be given an opportunity to discuss that, and to agree on any final preferred sequence. Regards, Keith. |