Hi all, 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 in=e [EMAIL PROTECTED] d=1 Illegal filename. Character <@> not allowed. ERROR: <[EMAIL PROTECTED]> is an illegal file name Why so restrictive? The current mapset is 'user1'. I modified library function G_check_input_output() to handle also this case. If mapset defined for output map is not the current one: ERROR: Mapset defined for output map <[EMAIL PROTECTED]> is not the current mapset Any objects to commit to CVS? Martin -- Martin Landa <[EMAIL PROTECTED]> * http://gama.fsv.cvut.cz/~landa *
Index: lib/gis/legal_name.c =================================================================== RCS file: /home/grass/grassrepository/grass6/lib/gis/legal_name.c,v retrieving revision 2.11 diff -u -r2.11 legal_name.c --- lib/gis/legal_name.c 14 Apr 2007 23:01:59 -0000 2.11 +++ lib/gis/legal_name.c 29 Oct 2007 11:06:20 -0000 @@ -1,14 +1,14 @@ /** * \file legal_name.c * - * \brief Functions to handle file name legality. + * \brief GIS Library - Handle file name legality. * * This program is free software under the GNU General Public License * (>=v2). Read the file COPYING that comes with GRASS for details. * * \author GRASS GIS Development Team * - * \date 1999-2006 + * \date 1999-2007 */ #include <stdio.h> @@ -18,8 +18,6 @@ /** - * \fn int G_legal_filename (char *s) - * * \brief Check for legal database file name. * * Legal file names will <b>not</b> begin with '.' or NULL and must @@ -35,14 +33,14 @@ int G_legal_filename (const char *s) { if (*s == '.' || *s == 0) { - fprintf(stderr, _("Illegal filename. Cannot be '.' or 'NULL'\n")); + G_warning(_("Illegal filename. Cannot be '.' or 'NULL'.")); return -1; } for (; *s; s++) if (*s == '/' || *s == '"' || *s == '\'' || *s <= ' ' || *s == '@' || *s == ',' || *s == '=' || *s == '*' || *s > 0176) { - fprintf(stderr, _("Illegal filename. Character <%c> not allowed.\n"), *s); + G_warning (_("Illegal filename. Character '%c' not allowed."), *s); return -1; } @@ -51,8 +49,6 @@ /** - * \fn int G_check_input_output_name (char * input, char * output, int error) - * * \brief Check input and output file names. * * Check: 1) output is legal map name, 2) if can find input map, and 3) @@ -67,34 +63,59 @@ int G_check_input_output_name ( const char * input, const char * output, int error ) { + char output_name[1000], output_mapset[1000]; char *mapset; - if ( output == NULL) return 0; /* don't die on undefined parameters */ - if ( G_legal_filename(output) == -1 ) { + /* output */ + if ( output == NULL) + return 0; /* don't die on undefined parameters */ + + /* is output name fully qualified ? */ + if (G__name_is_fully_qualified(output, output_name, output_mapset)) { + if (strcmp(G_mapset(), output_mapset)) { + if ( error == GR_FATAL_EXIT ) { + G_fatal_error ( _("Mapset defined for output map <%s> is " + "not the current mapset"), output ); + } else if ( error == GR_FATAL_PRINT ) { + G_warning ( _("Mapset defined for output map <%s> is " + "not the current mapset"), output ); + return 1; + } else { /* GR_FATAL_RETURN */ + return 1; + } + } + } + else { + G_strcpy (output_name, output); + } + + if ( G_legal_filename(output_name) == -1 ) { if ( error == GR_FATAL_EXIT ) { - G_fatal_error ( _("Output name '%s' is not valid rast name."), output ); + G_fatal_error ( _("Output name <%s> is not valid raster map name"), output_name ); } else if ( error == GR_FATAL_PRINT ) { - G_warning ( _("Output name '%s' is not valid rast name."), output ); + G_warning ( _("Output name <%s> is not valid raster map name"), output_name ); return 1; } else { /* GR_FATAL_RETURN */ return 1; } } + /* input */ mapset = G_find_cell2 (input, ""); if ( mapset == NULL ) { if ( error == GR_FATAL_EXIT ) { - G_fatal_error ( _("Cannot find input map '%s'"), input ); + G_fatal_error ( _("Raster map <%s> not found"), input ); } else if ( error == GR_FATAL_PRINT ) { - G_warning ( _("Cannot find input map '%s'"), input ); + G_warning ( _("Raster map <%s> not found"), input ); return 1; } else { /* GR_FATAL_RETURN */ return 1; } } - if ( strcmp(mapset,G_mapset()) == 0 ) { + /* input <-> output */ + if ( strcmp(mapset, G_mapset()) == 0 ) { char nm[1000], ms[1000]; const char *in; @@ -104,11 +125,11 @@ in = input; } - if ( strcmp(in,output) == 0 ) { + if ( strcmp(in, output_name) == 0 ) { if ( error == GR_FATAL_EXIT ) { - G_fatal_error ( _("Output map '%s' is used as input"), output ); + G_fatal_error ( _("Output raster map <%s> is used as input"), output_name ); } else if ( error == GR_FATAL_PRINT ) { - G_warning ( _("Output map '%s' is used as input"), output ); + G_warning ( _("Output raster map <%s> is used as input"), output_name ); return 1; } else { /* GR_FATAL_RETURN */ return 1;
_______________________________________________ grass-dev mailing list grass-dev@grass.itc.it http://grass.itc.it/mailman/listinfo/grass-dev