Mail Archives: cygwin/1998/07/31/17:05:25
---Andrew Dalgleish <andrewd AT axonet DOT com DOT au> wrote:
>
>
>
> > -----Original Message-----
> > From: Earnie Boyd [SMTP:earnie_boyd AT yahoo DOT com]
> > Sent: 1998 July 30, Thursday 21:37
> > To: gnu-win32 AT cygnus DOT com; Andrew Dalgleish
> > Subject: RE: Asterisk expansion...
> >
> > ---Andrew Dalgleish <andrewd AT axonet DOT com DOT au> wrote:
> > >
> > >
> > >
> > <snip>
> > >
> > > When linked with SETARGV.OBJ, the arguments are globbed.
> > > When linked without SETARGV.OBJ, the arguments are NOT globbed.
> > >
> > > Hence cmd/command do NOT do globbing for external commands
> > >
> > > (Actually it is possible that globbing is done by the shell.
> > > E.g. the shell could peek into the .EXE to detect which version of
> > > SETARGV.OBJ was included.
> > > I don't think this is very likely, but then it is Microsoft... :-)
> > >
> >
> > It is also possible that cmd.exe/command.com does do the globbing
and
> > that the default _setargv reads the command line and resets the argv
> > array. I would do this if I had the MS compiler; but, try with this
> > sample code creating your own _setargv which simply does nothing
> > (maybe output a message so that you know that your _setargv was
> > called).
> [Andrew Dalgleish]
> I've waded through Microsoft's run-time source.
>
> SETARGV.OBJ contains a single function "_setargv".
> The default version does nothing.
> The globbing version sets a flag "_dowildcard" to one.
>
> Later in the startup "__getmainargs" calls "__setargv".
> (It took me a while to realize this one has two leading underscores
:-)
>
> If the flag is set "__setargv" then calls "_cwild".
> "_cwild" does some simple checks for quoted arguments (which are not
> expanded), and passes args which may be wildcards on to "tmatch".
> "tmatch" looks for the wildcard characters, then uses
> FindFirstFile/FindNextFile to build the list of files.
>
> Most of these functions have two versions, one for char and one for
> wchar_t
> They use a single source with lots of #if's sprinkled around.
> For example "tmatch" is #defined to either "match" or "wmatch"
>
> The bottom line - cmd/command do not glob.
>
>
>
I found the following code from the init.c code for mingw32. Note
that it has nothing to do with _setargv but it does confirm that
cmd/command _DO_NOT_GLOB_.
/* NOTE: Thanks to Pedro A. Aranda Gutiirrez <paag AT tid DOT es> for pointing
* this out to me. GetMainArgs (used below) takes a fourth argument
* which is an int that controls the globbing of the command line. If
* _CRT_glob is non-zero the command line will be globbed (e.g. *.*
* expanded to be all files in the startup directory). In the mingw32
* library a _CRT_glob variable is defined as being -1, enabling
* this command line globbing by default. To turn it off and do all
* command line processing yourself (and possibly escape bogons in
* MS's globbing code) include a line in one of your source modules
* defining _CRT_glob and setting it to zero, like this:
* int _CRT_glob = 0;
*/
extern int _CRT_glob;
/*
* Initialize the __argc, __argv and _environ variables.
*/
static void
_mingw32_init_mainargs ()
{
/*
* CRTDLL provides a nice little function for doing just that.
* Convenient isn't it?
* NOTE: The last
*/
(void) __GetMainArgs(&__argc, &__argv, &_environ, _CRT_glob);
}
==
- \\||//
---o0O0--Earnie--0O0o----
--earnie_boyd AT yahoo DOT com--
------ooo0O--O0ooo-------
_________________________________________________________
DO YOU YAHOO!?
Get your free @yahoo.com address at http://mail.yahoo.com
-
For help on using this list (especially unsubscribing), send a message to
"gnu-win32-request AT cygnus DOT com" with one line of text: "help".
- Raw text -