[GRASS-dev] lib/vector/Vlib/*.c: Too much uses of GRASS_VECT_DIRECTORY

Markus Metz markus.metz.giswork at googlemail.com
Sun Mar 22 09:26:19 EDT 2009


If it's tested, at least I have no objections.
Not sure if it will give problems when char buf[200] is treated as char 
result[GPATH_MAX].

Just two remarks. First, please work with latest svn version which is 
r36445 since 2009-03-21 10:19:54 +0100 i.e. yesterday, because I'm also 
busy with the vector libs. Second, I have already changed G_find_file2 
to G_find_vector2 in Vect_open_new.

Best regards,

Markus M


Ivan Shmakov wrote:
> 	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@%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>"),
>
>   


More information about the grass-dev mailing list