May I suggest the change below? Basically, this one introduces three tiny new functions to be used instead of coding the construction of the vector map-related filenames explicitly. Like:
- sprintf (buf, "%s/%s", GRASS_VECT_DIRECTORY, map_info->name); + Vect_map_file_name_rel (buf, map_info); I wasn't sure where to declare these functions, so I've added the prototypes to `include/Vect.h'. Index: include/Vect.h =================================================================== --- include/Vect.h (revision 36440) +++ include/Vect.h (working copy) @@ -218,6 +218,13 @@ int Vect_rewind(struct Map_info *); int Vect_close(struct Map_info *); +/* filenames */ +int Vect_map_file_name_rel (char [GPATH_MAX], const struct Map_info *); +int Vect_map_element_file_name_rel (char [GPATH_MAX], + const struct Map_info *, const char *); +int Vect_map_element_file_name_abs (char [GPATH_MAX], + const struct Map_info *, const char *); + /* Read/write lines, nodes, areas */ /* Level 1 and 2 */ int Vect_read_next_line(struct Map_info *, struct line_pnts *, Index: lib/vector/Vlib/file_name.c =================================================================== --- lib/vector/Vlib/file_name.c (revision 0) +++ lib/vector/Vlib/file_name.c (revision 0) @@ -0,0 +1,48 @@ +/*! + \file file_name.c + + \brief GIS library - Determine GRASS data base / vector file name + + (C) 2009 by the GRASS Development Team + + This program is free software under the GNU General Public License as + published by the Free Software Foundation; either version 2 of the + License, or (at your option) any later version. + + Read the file COPYING that comes with GRASS + for details. + */ + +#include <string.h> +#include <grass/gis.h> +#include <grass/Vect.h> + +int +Vect_map_file_name_rel (char result[GPATH_MAX], + const struct Map_info *map) +{ + return + sprintf (result, "%s/%s", + GRASS_VECT_DIRECTORY, map->name); +} + +int +Vect_map_element_file_name_rel (char result[GPATH_MAX], + const struct Map_info *map, + const char *element) +{ + return + sprintf (result, "%s/%s/%s", + GRASS_VECT_DIRECTORY, map->name, element); +} + +int +Vect_map_element_file_name_abs (char result[GPATH_MAX], + const struct Map_info *map, + const char *element) +{ + return + sprintf (result, "%s/%s/%s/%s/%s/%s", + map->gisdbase, map->location, map->mapset, + GRASS_VECT_DIRECTORY, map->name, element); +} Index: lib/vector/Vlib/build.c =================================================================== --- lib/vector/Vlib/build.c (revision 36440) +++ lib/vector/Vlib/build.c (working copy) @@ -247,7 +247,7 @@ plus = &(Map->plus); /* write out all the accumulated info to the plus file */ - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); G__file_name(fname, buf, GV_TOPO_ELEMENT, Map->mapset); G_debug(1, "Open topo: %s", fname); dig_file_init(&fp); @@ -398,7 +398,7 @@ plus = &(Map->plus); /* write out rtrees to the sidx file */ - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); G__file_name(fname, buf, GV_SIDX_ELEMENT, Map->mapset); G_debug(1, "Open sidx: %s", fname); dig_file_init(&fp); Index: lib/vector/Vlib/close.c =================================================================== --- lib/vector/Vlib/close.c (revision 36440) +++ lib/vector/Vlib/close.c (working copy) @@ -77,7 +77,7 @@ struct stat info; /* Delete old support files if available */ - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); G__file_name(file_path, buf, GV_TOPO_ELEMENT, G_mapset()); if (stat(file_path, &info) == 0) /* file exists? */ Index: lib/vector/Vlib/open_nat.c =================================================================== --- lib/vector/Vlib/open_nat.c (revision 36440) +++ lib/vector/Vlib/open_nat.c (working copy) @@ -49,7 +49,7 @@ G_debug(1, "V1_open_old_nat(): name = %s mapset = %s", Map->name, Map->mapset); - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); dig_file_init(&(Map->dig_fp)); if (update) Map->dig_fp.file = G_fopen_modify(buf, GRASS_VECT_COOR_ELEMENT); Index: lib/vector/Vlib/close_ogr.c =================================================================== --- lib/vector/Vlib/close_ogr.c (revision 36440) +++ lib/vector/Vlib/close_ogr.c (working copy) @@ -73,7 +73,7 @@ if (strcmp(Map->mapset, G_mapset()) == 0 && Map->support_updated && Map->plus.built == GV_BUILD_ALL) { - sprintf(elem, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (elem, Map); G__file_name(fname, elem, "fidx", Map->mapset); G_debug(4, "Open fidx: %s", fname); dig_file_init(&fp); Index: lib/vector/Vlib/cindex.c =================================================================== --- lib/vector/Vlib/cindex.c (revision 36440) +++ lib/vector/Vlib/cindex.c (working copy) @@ -451,7 +451,7 @@ plus = &(Map->plus); - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); G__file_name(fname, buf, GV_CIDX_ELEMENT, Map->mapset); G_debug(2, "Open cidx: %s", fname); dig_file_init(&fp); @@ -497,7 +497,7 @@ Plus = &(Map->plus); - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); G__file_name(file_path, buf, GV_CIDX_ELEMENT, Map->mapset); if (stat(file_path, &info) != 0) /* does not exist */ Index: lib/vector/Vlib/open_ogr.c =================================================================== --- lib/vector/Vlib/open_ogr.c (revision 36440) +++ lib/vector/Vlib/open_ogr.c (working copy) @@ -122,7 +122,7 @@ G_debug(3, "V2_open_old_ogr()"); - sprintf(elem, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (elem, Map); dig_file_init(&fp); fp.file = G_fopen_old(elem, "fidx", Map->mapset); if (fp.file == NULL) { Index: lib/vector/Vlib/field.c =================================================================== --- lib/vector/Vlib/field.c (revision 36440) +++ lib/vector/Vlib/field.c (working copy) @@ -603,9 +603,7 @@ Map->format); } - sprintf(file, "%s/%s/%s/%s/%s/%s", Map->gisdbase, Map->location, - Map->mapset, GRASS_VECT_DIRECTORY, Map->name, - GRASS_VECT_DBLN_ELEMENT); + Vect_map_element_file_name_abs (file, Map, GRASS_VECT_DBLN_ELEMENT); G_debug(1, "dbln file: %s", file); fd = fopen(file, "r"); @@ -676,9 +680,7 @@ dbl = Map->dblnk; - sprintf(file, "%s/%s/%s/%s/%s/%s", Map->gisdbase, Map->location, - Map->mapset, GRASS_VECT_DIRECTORY, Map->name, - GRASS_VECT_DBLN_ELEMENT); + Vect_map_element_file_name_abs (file, Map, GRASS_VECT_DBLN_ELEMENT); G_debug(1, "dbln file: %s", file); fd = fopen(file, "w"); Index: lib/vector/Vlib/header.c =================================================================== --- lib/vector/Vlib/header.c (revision 36440) +++ lib/vector/Vlib/header.c (working copy) @@ -88,7 +88,7 @@ char buf[200]; FILE *head_fp; - sprintf(buf, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buf, Map); head_fp = G_fopen_new(buf, GRASS_VECT_HEAD_ELEMENT); if (head_fp == NULL) { @@ -137,7 +137,7 @@ Vect_set_thresh(Map, 0.); G_debug(1, "Vect__read_head(): vector = %...@%s", Map->name, Map->mapset); - sprintf(buff, "%s/%s", GRASS_VECT_DIRECTORY, Map->name); + Vect_map_file_name_rel (buff, Map); head_fp = G_fopen_old(buff, GRASS_VECT_HEAD_ELEMENT, Map->mapset); if (head_fp == NULL) { G_warning(_("Unable to open header file of vector <%s>"), -- FSF associate member #7257 _______________________________________________ grass-dev mailing list grass-dev@lists.osgeo.org http://lists.osgeo.org/mailman/listinfo/grass-dev