Hi,

The following test case script fails under cygwin64:

```
out32=$(/cygdrive/c/cygwin/bin/echo.exe 'a\\ b')
out64=$(/cygdrive/c/cygwin64/bin/echo.exe 'a\ b')
test "$out32" = "$out64"
```

In other words, while the correct (by-argv-memory) result is `a\\ b`,
cygwin32 gives `a\ b` as output instead. The test case works fine when
CYGWIN=noglob is set, but then `echo.exe 'a\" b'` fails miserably.

The problem is that a cygwin32 program, when run from cygwin64, takes
the code path of normal (non-cygwin) programs. The argv is translated
according to MSVCRT rules in linebuf::fromargv(), but on the receiving
side cygwin's build_argv() is incompatible with MSVCRT rules.

The question mark on the [bug] is due to the apparent old age of this
very unique parsing code and some features it implies. The whole
`winshell` name is pretty bad to start with, since it's really more
relevant to the configurable glob setting as a cygwin parent would
have filled in a `cygheap_exec_info` structure anyways. The link
between globify and quoted is also pretty wild to go through. I mean,
there's nothing sane about cmdline globbing under windows, but a good
place to start is trying to do MSVCRT quoting. The glob rewriting in
globify() should probably go into quoted() for reader's sanity too.

Regards,
Mingye Wang (Artoria2e5)
--
Problem reports:      https://cygwin.com/problems.html
FAQ:                  https://cygwin.com/faq/
Documentation:        https://cygwin.com/docs.html
Unsubscribe info:     https://cygwin.com/ml/#unsubscribe-simple

Reply via email to