Просмотр исходного кода

fix r56095: do NOT store vector backward version info one place

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@56232 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 12 лет назад
Родитель
Сommit
382f777bf3

+ 15 - 14
include/vect/dig_structs.h

@@ -277,6 +277,18 @@ struct recycle
     char dummy;
 };
 
+/*! \brief Backward compatibility version info */
+struct Version_info {
+    /*! \brief Current version (major) */
+    int major;
+    /*! \brief Current version (minor) */
+    int minor;
+    /*! \brief Earliest version that can use this data format (major) */
+    int back_major;
+    /*! \brief Earliest version that can use this data format (minor) */
+    int back_minor;
+};
+
 /*!
   \brief Vector map header data
 
@@ -326,6 +338,9 @@ struct dig_head
     /* Programmers should NOT touch any thing below here */
     /* Library takes care of everything for you          */
 
+    /*! \brief Version info for coor file */
+    struct Version_info coor_version;
+
     /*!
       \brief 2D/3D vector data
 
@@ -727,18 +742,6 @@ struct Cat_index
     off_t offset;
 };
 
-/*! \brief Backward compatibility version info */
-struct Version_info {
-    /*! \brief Current version (major) */
-    int major;
-    /*! \brief Current version (minor) */
-    int minor;
-    /*! \brief Earliest version that can use this data format (major) */
-    int back_major;
-    /*! \brief Earliest version that can use this data format (minor) */
-    int back_minor;
-};
-
 /*!
   \brief Basic topology-related info
 
@@ -748,8 +751,6 @@ struct Plus_head
 {
     /*! \brief Backward compatibility version info */
     struct {
-        /*! \brief Version info for coor file */
-        struct Version_info coor;
         /*! \brief Version info for topology file */
         struct Version_info topo;
         /*! \brief Version info for spatial index file */

+ 2 - 2
lib/vector/Vlib/geos.c

@@ -314,7 +314,7 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, int *typ
  
     /* skip categories */
     if (do_cats) {
-	if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+	if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 	    if (0 >= dig__fread_port_I(&n_cats, 1, &(Map->dig_fp)))
 		return NULL;
 	}
@@ -325,7 +325,7 @@ GEOSCoordSequence *V1_read_line_geos(struct Map_info *Map, long offset, int *typ
 	}
 	G_debug(3, "    n_cats = %d", n_cats);
 
-	if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+	if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 	    size = (2 * PORT_INT) * n_cats;
 	}
 	else {		                /* coor format 5.0 */

+ 4 - 4
lib/vector/Vlib/open_nat.c

@@ -99,10 +99,10 @@ int V1_open_new_nat(struct Map_info *Map, const char *name, int with_z)
     path = Vect__get_path(Map);
 
     /* Set the 'coor' file version */
-    Map->plus.version.coor.major = GV_COOR_VER_MAJOR;
-    Map->plus.version.coor.minor = GV_COOR_VER_MINOR;
-    Map->plus.version.coor.back_major    = GV_COOR_EARLIEST_MAJOR;
-    Map->plus.version.coor.back_minor    = GV_COOR_EARLIEST_MINOR;
+    Map->head.coor_version.major = GV_COOR_VER_MAJOR;
+    Map->head.coor_version.minor = GV_COOR_VER_MINOR;
+    Map->head.coor_version.back_major = GV_COOR_EARLIEST_MAJOR;
+    Map->head.coor_version.back_minor = GV_COOR_EARLIEST_MINOR;
 
     /* TODO: open better */
     dig_file_init(&(Map->dig_fp));

+ 3 - 3
lib/vector/Vlib/read_nat.c

@@ -286,7 +286,7 @@ int read_line_nat(struct Map_info *Map,
 	c->n_cats = 0;
 
     if (do_cats) {
-	if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+	if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 	    if (0 >= dig__fread_port_I(&n_cats, 1, &(Map->dig_fp)))
 		return (-2);
 	}
@@ -303,7 +303,7 @@ int read_line_nat(struct Map_info *Map,
 		if (0 > dig_alloc_cats(c, (int)n_cats + 1))
 		    return -1;
 
-		if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+		if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 		    if (0 >=
 			dig__fread_port_I(c->field, n_cats, &(Map->dig_fp)))
 			return (-2);
@@ -321,7 +321,7 @@ int read_line_nat(struct Map_info *Map,
 	    }
 	}
 	else {
-	    if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+	    if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 		size = (off_t) (2 * PORT_INT) * n_cats;
 	    }
 	    else {		/* coor format 5.0 */

+ 2 - 2
lib/vector/Vlib/write_nat.c

@@ -435,7 +435,7 @@ off_t V1__rewrite_line_nat(struct Map_info *Map,
     }
 
     if (cats->n_cats > 0) {
-	if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+	if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 	    if (0 >= dig__fwrite_port_I(&(cats->n_cats), 1, dig_fp))
 		return -1;
 	}
@@ -446,7 +446,7 @@ off_t V1__rewrite_line_nat(struct Map_info *Map,
 	}
 
 	if (cats->n_cats > 0) {
-	    if (Map->plus.version.coor.minor == 1) {	/* coor format 5.1 */
+	    if (Map->head.coor_version.minor == 1) {	/* coor format 5.1 */
 		if (0 >=
 		    dig__fwrite_port_I(cats->field, cats->n_cats, dig_fp))
 		    return -1;

+ 18 - 18
lib/vector/diglib/head.c

@@ -30,10 +30,10 @@ int dig__write_head(struct Map_info *Map)
     dig_fseek(&(Map->dig_fp), 0L, 0);
 
     /* bytes 1 - 5 */
-    buf[0] = Map->plus.version.coor.major;
-    buf[1] = Map->plus.version.coor.minor;
-    buf[2] = Map->plus.version.coor.back_major;
-    buf[3] = Map->plus.version.coor.back_minor;
+    buf[0] = Map->head.coor_version.major;
+    buf[1] = Map->head.coor_version.minor;
+    buf[2] = Map->head.coor_version.back_major;
+    buf[3] = Map->head.coor_version.back_minor;
 
     buf[4] = Map->head.port.byte_order;
     if (0 >= dig__fwrite_port_C((char *)buf, 5, &(Map->dig_fp)))
@@ -89,38 +89,38 @@ int dig__read_head(struct Map_info *Map)
     /* bytes 1 - 5 */
     if (0 >= dig__fread_port_C((char *)buf, 5, &(Map->dig_fp)))
 	return (0);
-    Map->plus.version.coor.major = buf[0];
-    Map->plus.version.coor.minor = buf[1];
-    Map->plus.version.coor.back_major = buf[2];
-    Map->plus.version.coor.back_minor = buf[3];
+    Map->head.coor_version.major = buf[0];
+    Map->head.coor_version.minor = buf[1];
+    Map->head.coor_version.back_major = buf[2];
+    Map->head.coor_version.back_minor = buf[3];
     Map->head.port.byte_order = buf[4];
 
     G_debug(2,
 	    "Coor header: file version %d.%d , supported from GRASS version %d.%d",
-	    Map->plus.version.coor.major, Map->plus.version.coor.minor,
-	    Map->plus.version.coor.back_major, Map->plus.version.coor.back_minor);
+	    Map->head.coor_version.major, Map->head.coor_version.minor,
+	    Map->head.coor_version.back_major, Map->head.coor_version.back_minor);
 
     G_debug(2, "  byte order %d", Map->head.port.byte_order);
 
     /* check version numbers */
-    if (Map->plus.version.coor.major > GV_COOR_VER_MAJOR ||
-	Map->plus.version.coor.minor > GV_COOR_VER_MINOR) {
+    if (Map->head.coor_version.major > GV_COOR_VER_MAJOR ||
+	Map->head.coor_version.minor > GV_COOR_VER_MINOR) {
 	/* The file was created by GRASS library with higher version than this one */
 
-	if (Map->plus.version.coor.back_major > GV_COOR_VER_MAJOR ||
-	    Map->plus.version.coor.back_minor > GV_COOR_VER_MINOR) {
+	if (Map->head.coor_version.back_major > GV_COOR_VER_MAJOR ||
+	    Map->head.coor_version.back_minor > GV_COOR_VER_MINOR) {
 	    /* This version of GRASS lib is lower than the oldest which can read this format */
 	    G_fatal_error
 		("Vector 'coor' format version %d.%d is not supported by this version of GRASS. "
-		 "Update your GRASS.", Map->plus.version.coor.major,
-		 Map->plus.version.coor.minor);
+		 "Update your GRASS.", Map->head.coor_version.major,
+		 Map->head.coor_version.minor);
 	    return (-1);
 	}
 
 	G_warning
 	    ("Your GRASS version does not fully support vector format %d.%d."
-	     " Consider to upgrade GRASS.", Map->plus.version.coor.major,
-	     Map->plus.version.coor.minor);
+	     " Consider to upgrade GRASS.", Map->head.coor_version.major,
+	     Map->head.coor_version.minor);
     }
 
     dig_init_portable(&port, Map->head.port.byte_order);

+ 2 - 2
vector/v.convert/read.c

@@ -80,12 +80,12 @@ int read_dig(FILE * Digin, struct Map_info *Mapout,
 	return -1;
 
     if (buf[0] != '%' || buf[1] != '%') {	/* Version3.0 */
-	In_plus->version.coor.major = 3;
+	In_head.coor_version.major = 3;
 	portable = 0;		/* input vector is not portable format */
 	G_message(_("Input file is version 3."));
     }
     else {
-	In_plus->version.coor.major = 4;
+	In_head.coor_version.major = 4;
 	G_message(_("Input file is version 4."));
 	/* determine if in portable format or not */
 	if (buf[6] == 1 && (~buf[6] & 0xff) == (buf[7] & 0xff)) {	/* portable ? */