Pārlūkot izejas kodu

Fixed NULL range handling

git-svn-id: https://svn.osgeo.org/grass/grass/trunk@50188 15284696-431f-4ddb-bdfa-cd5b030d7da7
Soeren Gebbert 13 gadi atpakaļ
vecāks
revīzija
6622b68532
1 mainītis faili ar 11 papildinājumiem un 2 dzēšanām
  1. 11 2
      lib/raster3d/range.c

+ 11 - 2
lib/raster3d/range.c

@@ -62,6 +62,7 @@ Rast3d_read_range(const char *name, const char *mapset, struct FPRange *drange)
  /* adapted from Rast_read_fp_range */
  /* adapted from Rast_read_fp_range */
 {
 {
     int fd;
     int fd;
+    int bytes_read;
     char xdr_buf[100];
     char xdr_buf[100];
     DCELL dcell1, dcell2;
     DCELL dcell1, dcell2;
     XDR xdr_str;
     XDR xdr_str;
@@ -76,7 +77,16 @@ Rast3d_read_range(const char *name, const char *mapset, struct FPRange *drange)
 	return -1;
 	return -1;
     }
     }
 
 
-    if (read(fd, xdr_buf, 2 * RASTER3D_XDR_DOUBLE_LENGTH) != 2 * RASTER3D_XDR_DOUBLE_LENGTH) {
+    bytes_read = read(fd, xdr_buf, 2 * RASTER3D_XDR_DOUBLE_LENGTH);
+
+    /* if the f_range file exists, but empty the range is NULL -> a NULL map */
+    if (bytes_read == 0) {
+	close(fd);
+        return 1;
+    }
+
+
+    if (bytes_read != 2 * RASTER3D_XDR_DOUBLE_LENGTH) {
 	close(fd);
 	close(fd);
 	G_warning(_("Error reading range file for [%s in %s]"), name, mapset);
 	G_warning(_("Error reading range file for [%s in %s]"), name, mapset);
 	return 2;
 	return 2;
@@ -85,7 +95,6 @@ Rast3d_read_range(const char *name, const char *mapset, struct FPRange *drange)
     xdrmem_create(&xdr_str, xdr_buf, (u_int) RASTER3D_XDR_DOUBLE_LENGTH * 2,
     xdrmem_create(&xdr_str, xdr_buf, (u_int) RASTER3D_XDR_DOUBLE_LENGTH * 2,
 		  XDR_DECODE);
 		  XDR_DECODE);
 
 
-    /* if the f_range file exists, but empty */
     if (!xdr_double(&xdr_str, &dcell1) || !xdr_double(&xdr_str, &dcell2)) {
     if (!xdr_double(&xdr_str, &dcell1) || !xdr_double(&xdr_str, &dcell2)) {
 	close(fd);
 	close(fd);
 	G_warning(_("Error reading range file for [%s in %s]"), name, mapset);
 	G_warning(_("Error reading range file for [%s in %s]"), name, mapset);