Browse Source

write sidx fixed

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@38397 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 16 years ago
parent
commit
7bee4e68a7
1 changed files with 5 additions and 2 deletions
  1. 5 2
      lib/vector/diglib/spindex_rw.c

+ 5 - 2
lib/vector/diglib/spindex_rw.c

@@ -598,7 +598,10 @@ static off_t rtree_write_to_sidx(GVFILE * fp, off_t startpos,
     } s[50];
     int top = 0;
 
-    sidx_nodesize = t->nodesize - MAXCARD * (sizeof(off_t) - off_t_size);
+    /* should be foolproof */
+    sidx_nodesize =
+	(int)(2 * sizeof(int) +
+	      MAXCARD * (off_t_size + NUMSIDES * sizeof(double)));
 
     /* stack size of t->n_levels + 1 would be enough because of depth first search */
     /* only one node per level on stack at any given time */
@@ -634,7 +637,7 @@ static off_t rtree_write_to_sidx(GVFILE * fp, off_t startpos,
 	if (writeout) {
 	    /* write node to sidx file */
 	    if (G_ftell(fp->file) != nextfreepos)
-		G_fatal_error("position mismatch");
+		G_fatal_error("write sidx: wrong node position in file");
 
 	    /* write with dig__fwrite_port_* fns */
 	    dig__fwrite_port_I(&(s[top].sn->count), 1, fp);