[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