浏览代码

ogsflib: fix for https://trac.osgeo.org/grass/ticket/1736

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@54877 15284696-431f-4ddb-bdfa-cd5b030d7da7
Markus Metz 12 年之前
父节点
当前提交
fc0c2ae61c
共有 2 个文件被更改,包括 14 次插入6 次删除
  1. 1 1
      include/defs/ogsf.h
  2. 13 5
      lib/ogsf/gvl_calc.c

+ 1 - 1
include/defs/ogsf.h

@@ -715,7 +715,7 @@ int gvl_isosurf_calc(geovol *);
 int gvl_slices_calc(geovol *);
 void gvl_write_char(int, unsigned char **, unsigned char);
 unsigned char gvl_read_char(int, const unsigned char *);
-void gvl_align_data(int, unsigned char *);
+void gvl_align_data(int, unsigned char **);
 
 /* gvld.c */
 int gvld_vol(geovol *);

+ 13 - 5
lib/ogsf/gvl_calc.c

@@ -687,7 +687,7 @@ int gvl_isosurf_calc(geovol * gvol)
 	    if (dbuff[i].old == isosurf->data)
 		dbuff[i].old = NULL;
 	    G_free(isosurf->data);
-	    gvl_align_data(dbuff[i].ndx_new, dbuff[i].new);
+	    gvl_align_data(dbuff[i].ndx_new, &(dbuff[i].new));
 	    isosurf->data = dbuff[i].new;
 	    isosurf->data_desc = 0;
 	}
@@ -776,16 +776,24 @@ unsigned char gvl_read_char(int pos, const unsigned char *data)
    \param pos position index
    \param data data buffer
  */
-void gvl_align_data(int pos, unsigned char *data)
+void gvl_align_data(int pos, unsigned char **data)
 {
+    unsigned char *p = *data;
+    
+
     /* realloc memory to fit in data length */
-    data = (char *)G_realloc(data, sizeof(char) * pos);	/* G_fatal_error */
-    if (!data) {
+    p = (char *)G_realloc(p, sizeof(char) * pos);	/* G_fatal_error */
+    if (!p) {
 	return;
     }
 
     G_debug(3, "gvl_align_data(): reallocate memory finally to : %d B", pos);
 
+    if (pos == 0)
+	p = NULL;
+    
+    *data = p;
+
     return;
 }
 
@@ -1014,7 +1022,7 @@ int slice_calc(geovol * gvl, int ndx_slc, void *colors)
 
     /* end reading volume file */
     gvl_file_end_read(vf);
-    gvl_align_data(pos, slice->data);
+    gvl_align_data(pos, &(slice->data));
 
     return (1);
 }