[GRASS-dev] Re: testing native winGRASS
Glynn Clements
glynn at gclements.plus.com
Fri May 18 14:13:44 EDT 2007
Glynn Clements wrote:
> > >> general/g.mapsets/set_path.c:65: if (system (command) == 0)
> > >> strcpy (command, "g.mapsets -p mapset=") & other strcat calls
> > >
> > > sprintf(mapset_arg, "mapset=%s", mapset)
> > > G_spawn("g.mapsets", "g.mapsets", "-p", mapset_arg, <other args>, NULL);
> >
> > As the different strcat calls are embedded in if-then checks, I imagine
> > that we have to keep these checks and construct an array of <other args> ?
>
> Ah. That will need to wait until G_spawn_ex() has been extended (or
> has a G_vspawn_ex() version).
I've added G_vspawn_ex(), which takes an argument array as
"const char **" instead of a variable-length argument list.
extern int G_vspawn_ex(const char *command, const char **args);
The args array needs to be terminated by a NULL pointer.
You can also use SF_ARGVEC to embed an argument array in the middle of
an argument list or array, e.g.:
const char *other_args[..];
G_spawn_ex("g.mapsets", "g.mapsets", "-p", mapset_arg, SF_ARGVEC, other_args, NULL);
G_vspawn_ex(cmd, args) is essentially equivalent to:
G_spawn_ex(cmd, SF_ARGVEC, args, NULL)
Also, the argument processing has been separated from the actual
spawning, so it should be easier to implement the MinGW version.
--
Glynn Clements <glynn at gclements.plus.com>
More information about the grass-dev
mailing list