From: Michael K. <mic...@gm...> - 2008-01-08 16:33:04
|
Hi, bash/mingw translates unix paths to windows paths in arguments containing a forward slash. This happens both with double-quotes and ANSI-C quoting. I do not see this behaviour under cygwin/bash 3.2.33. Is this a bug or am I mising something? test.c: #include <stdio.h> int main (int argc, char* argv[]) { fprintf(stdout, "test: %s\n", argv[1]); exit(0); } This one is ok... $ ./test $'(..\src) (foo::bar)' test: (..\src) (foo::bar) ...but $ ./test $'(../src) (foo::bar)' test: (..\src) (foo;bar) =========^=========^==== $ ./test "(../src) (foo::bar)" test: (..\src) (foo;bar) =========^=========^==== $ msysinfo MSYS 1.0.11(0.46/3/2) 2007-12-05 00:35 i686 unknown; targ=MINGW32 GNU bash, version 3.1.0(1)-release (i686-pc-msys); ENV=.profile Regards Michael |
From: Dave K. <dav...@ar...> - 2008-01-08 16:37:51
|
On 08 January 2008 16:33, Michael Kappert wrote: > Hi, > > bash/mingw translates unix paths to windows paths > in arguments containing a forward slash. > This happens both with double-quotes and ANSI-C quoting. > I do not see this behaviour under cygwin/bash 3.2.33. > Is this a bug or am I mising something? You're missing something: that's basically the difference between MinGW and Cygwin/MSYS. The latter two emulate the entire posix functionlity, e.g. the fopen() function understands posix paths and translates them internally. MinGW is almost entirely win32; the fopen function is the one from MSVCRT, so it only speaks win32 path syntax. cheers, DaveK -- Can't think of a witty .sigline today.... |
From: Michael K. <mic...@gm...> - 2008-01-08 16:45:02
|
Dave Korn wrote: > On 08 January 2008 16:33, Michael Kappert wrote: > >> Hi, >> >> bash/mingw translates unix paths to windows paths >> in arguments containing a forward slash. >> This happens both with double-quotes and ANSI-C quoting. >> I do not see this behaviour under cygwin/bash 3.2.33. >> Is this a bug or am I mising something? > > You're missing something: that's basically the difference between MinGW and > Cygwin/MSYS. The latter two emulate the entire posix functionlity, e.g. the > fopen() function understands posix paths and translates them internally. > MinGW is almost entirely win32; the fopen function is the one from MSVCRT, so > it only speaks win32 path syntax. Hi Dave, thanks for the quick reply! My problem is, the argument in question does not represent a path, that's why I quoted it, or at least so I think: $ ./test $'(../src) (foo::bar)' test: (..\src) (foo;bar) =========^=========^==== $ ./test "(../src) (foo::bar)" test: (..\src) (foo;bar) =========^=========^==== How can I prevent bash from modifying the argument? Regards Michael |
From: Dave K. <dav...@ar...> - 2008-01-08 18:00:09
|
On 08 January 2008 16:45, Michael Kappert wrote: Argh. I misspoke. It's MSYS that does the path conversions, not MinGW itself; that's how it emulates posix paths while only relying on the MinGW/MSVCRT library functions like fopen. Anyway: > My problem is, the argument in question does not represent a path, > that's why I quoted it, or at least so I think: > > $ ./test $'(../src) (foo::bar)' > test: (..\src) (foo;bar) > =========^=========^==== > > $ ./test "(../src) (foo::bar)" > test: (..\src) (foo;bar) > =========^=========^==== > > How can I prevent bash from modifying the argument? You're going to need help from someone who knows MinGW a bit better than me for this one, I'm afraid. I don't even know if the conversion is done by a modification to bash itself or if it's done in the CRT startup. (Anything I could say beyond this is guesswork, but if I was trying to guess, the first things I would try would be escaping the '/' and ':' chars.) Oh, hang on, I just googled "mingw path conversion". According to the thread at http://readlist.com/lists/lists.sourceforge.net/mingw-msys/0/530.html you can double-up the slashes to prevent them getting mangled. Apparently you should also take a browse through the "README.rtf" file that comes with MSYS. cheers, DaveK -- Can't think of a witty .sigline today.... |
From: Michael K. <mic...@gm...> - 2008-01-08 19:12:56
|
Dave Korn wrote: > On 08 January 2008 16:45, Michael Kappert wrote: > Oh, hang on, I just googled "mingw path conversion". According to the > thread at > http://readlist.com/lists/lists.sourceforge.net/mingw-msys/0/530.html > you can double-up the slashes to prevent them getting mangled. Apparently you > should also take a browse through the "README.rtf" file that comes with MSYS. Oops. Thanks for the pointer. Regards Michael |
From: Earnie B. <ea...@us...> - 2008-01-08 18:29:51
|
Quoting Michael Kappert <mic...@gm...>: > Hi, > > bash/mingw translates unix paths to windows paths > in arguments containing a forward slash. > This happens both with double-quotes and ANSI-C quoting. > I do not see this behaviour under cygwin/bash 3.2.33. > Is this a bug or am I mising something? > This is very much the expected behavior of MSYS when spawning a windows executable (an executable not dependent on msys-1.0.dll). > test.c: > #include <stdio.h> > > int main (int argc, char* argv[]) { > fprintf(stdout, "test: %s\n", argv[1]); > exit(0); > } > > This one is ok... > $ ./test $'(..\src) (foo::bar)' > test: (..\src) (foo::bar) > Correct, MSYS assumes that ..\ indicates the path is a windows path. > ...but > $ ./test $'(../src) (foo::bar)' > test: (..\src) (foo;bar) > =========^=========^==== > > $ ./test "(../src) (foo::bar)" > test: (..\src) (foo;bar) > =========^=========^==== > MSYS is assuming that since the path appears to be POSIX it needs to convert it to windows format and since {foo::bar) appears to be a POSIX path list it converts it to a windows path list. MSYS has a minimalistic goal of being able to execute ./configure && make using the MinGW version of GCC. In order to make that happen some assumptions needed to be made about the command line. Feel free to try to enhance MSYS, the source code is in the project CVS. Cesar Strauss is now the maintainer of the source and has the overall approval of patches. Earnie |
From: Michael K. <mic...@gm...> - 2008-01-11 13:33:23
|
Earnie Boyd wrote: > Quoting Michael Kappert <mic...@pu...>: > MSYS is assuming that since the path appears to be POSIX it needs to > convert it to windows format and since {foo::bar) appears to be a POSIX > path list it converts it to a windows path list. MSYS has a > minimalistic goal of being able to execute ./configure && make using > the MinGW version of GCC. Yes, this is what I'm trying to do :-) The app in question is a Lisp implementation, and Lisp uses :: as markers for "internal symbols" in a package... > Feel free to try to enhance MSYS, the source code is in the project > CVS. Cesar Strauss is now the maintainer of the source and has the > overall approval of patches. Ok, I'll have a look, but I'm really a C newbie. Michael |
From: Earnie B. <ea...@us...> - 2008-01-11 18:20:28
|
Quoting Michael Kappert <mic...@gm...>: > > Ok, I'll have a look, but I'm really a C newbie. > > I cut my C teeth on Cygwin (which is what MSYS is a fork of). C, Lisp, Java, D, etc. all have similar basics for programming languages making it rather easy (with good reference material) to switch from one to another. Earnie |