From: MARSHALL K. <Kei...@to...> - 2003-07-22 13:45:38
|
I don't want to start a flame war here, but ... On Tue, 22 Jul 2003 10:54:35 +0100, I wrote: >It seems likely that Microsoft have propagated the same deficient argument >handling into the MSVC runtime code, leading to Sam's problem; Duncan Murdoch lifted this out of context, and replied: >It's not deficient, it's just different. One advantage of the >DOS/Windows style of argument handling is that the application can >give meaningful error messages to the user, because the application >actually sees what was typed; another is that commands like > > ren ab* cd* > >actually work, without convoluted escape sequences. There are lots of >ways it could have been done better, but in some respects it's >superior to the Unix way of handling command lines. Just to set the record straight, I would like to say ... 1. Yes, the DOS and UNIX ways of passing arguments to processes are different; neither is deficient; each has its strengths and its weaknesses. 2. My statement above referred to the stdargv and setargv modules in the MSC runtime startup code; since the intent of these modules is to emulate the UNIX way of doing things, they *are* clearly *deficient* in their handling of single quotes! 3. ren ab* cd* works as it does in MSDOS, because *it* (i.e. the ren command) doesn't do file name globbing on its arguments; This has *absolutely* no relationship to the operation of the stdargv or setargv modules, since ren doesn't use them; as a COMMAND.COM built in, it was written in assembly language, and doesn't have *any* MSC runtime dependencies! (In fact, the ren ab* cd* form the ren command relies on a real mode kernel service inherited from MSDOS v1.xx, which *didn't* support path names; the newer version of this service, introduced in MSDOS v2.00 to support the new directory structure, *didn't* work like this, so ren path-to-ab\ab* path-to-cd\cd* doesn't do what you might expect). 4. Getting arguments of the form ab* into a UNIX application, *without* file name globbing in the shell, *doesn't* need convoluted escape sequences; it's as simple as: ren 'ab*' 'cd*' assuming a UNIX command equivalent of the MSDOS example above! Of course, UNIX doesn't provide such a command, but if I felt the need for one, (which I don't), I could write my own -- the wealth of standardised UNIX tools, which are what we look to MinGW to provide, make it a relatively trivial exercise. Regards, Keith Marshall. |