[GRASS-dev] Re: [Quantum GIS] #736: Some GRASS commands broken

Glynn Clements glynn at gclements.plus.com
Sat Jun 30 22:35:19 EDT 2007


Markus Neteler wrote:

> a colleague has found some strange problems in winQGIS/GRASS, signalled
> to the QGIS team. I wonder if the problem could be GRASS related.
> 
> Hints welcome,

> >  r.median base=CEA_cat at CEA_dati cover=CEA_aspect at CEA_dati
> >  output=aspect_median
> > 
> >  Illegal filename. Character <'> not allowed.

r.median invokes r.stats via system(), using a single quote:

    strcpy (command, "r.stats -a '");
    strcat (command, G_fully_qualified_name (basemap, base_mapset));
    strcat (command, ",");
    strcat (command, G_fully_qualified_name (covermap, cover_mapset));
    strcat (command, "'");

/* strcpy (command,"cat /tmp/t"); */
    stats_fd = popen (command, "r");

    sprintf (command, "r.reclass i='%s' o='%s'",
	G_fully_qualified_name (basemap, base_mapset), outmap);

system() uses the platform's shell: /bin/sh on Unix, cmd.exe on
Windows NT/2K/XP, command.com on 95/98/ME. Single quotes won't work
with the Windows shells.

r.average doesn't quote the map names, and uses double quotes around
the output filename:

    sprintf (command, "%s -anC input=%s,%s fs=space > \"%s\"",
	STATS, basemap->answer, covermap->answer, tempfile1);

Using double quotes should suffice so long as the map name doesn't
contain $ or ` (a double quote would also be problematic, but isn't
legal in map names).

Ultimately, we need a Windows implementation of G_spawn_ex(), so that
we can avoid the shell altogether.

-- 
Glynn Clements <glynn at gclements.plus.com>




More information about the grass-dev mailing list