[GRASS-dev] G_check_input_output() and fully qualified output map name

Hamish hamish_nospam at yahoo.com
Wed Oct 31 00:54:50 EDT 2007


Martin Landa wrote:
> I realized a strange behaviour of r.buffer, e.g.
> 
> $ r.buffer in=e out=e d=1
> 
> No error, input and output is the same...

r.buffer uses 
   opt2 = G_define_standard_option(G_OPT_R_OUTPUT);

which defines
   Opt->gisprompt    = "new,cell,raster";

the parser does check that the given name doesn't already exist.
Have you set the --overwrite enviro variable to be always on?

For the above example I get:
  ERROR: option <output>: <e> exists.


Presumably if you abuse --overwrite you get what you asked for.


> $ r.buffer in=e out=e at user1 d=1
> Illegal filename. Character <@> not allowed.
> ERROR: <e at user> is an illegal file name
> 
> Why so restrictive? The current mapset is 'user1'.

output maps can only be written to the current mapset*. Allowing '@' is
redundant, requires code (ie additional habitat for bugs) to check that
what's after the '@' matches G_mapset(), and might put ideas in people's
heads that 'output=map at other_mapset' isn't banned.

[*] i.rectify is the exception, it writes to the target mapset which
was set with i.target


I agree that the error message could be better.
If it were me, I'd keep it simple with something like

if ( G_legal_filename(output) == -1 ) {
   if(strchr(output, '@'))
      G_fatal_error(_("Output map name should not include a mapset"));
   ...



Hamish




More information about the grass-dev mailing list