]> granicus.if.org Git - postgis/commitdiff
Postgres 12 disallows variable length arrays in C
authorDarafei Praliaskouski <me@komzpa.net>
Thu, 13 Sep 2018 14:54:02 +0000 (14:54 +0000)
committerDarafei Praliaskouski <me@komzpa.net>
Thu, 13 Sep 2018 14:54:02 +0000 (14:54 +0000)
Patch by Laurenz Albe

Closes #4177

git-svn-id: http://svn.osgeo.org/postgis/trunk@16777 b70326c6-7e19-0410-871a-916f4a2858ee

NEWS
postgis/gserialized_estimate.c

diff --git a/NEWS b/NEWS
index 3ea6331ffee582c61ef3eb2391da6312f5e5cfa0..842f8e751f3c4a7510d0c2b7549cfcb90b2269d8 100644 (file)
--- a/NEWS
+++ b/NEWS
@@ -13,6 +13,7 @@ PostGIS 3.0.0
   - #4172, Fix memory leak in lwgeom_offsetcurve (Raúl Marín)
   - #4173, Fix undefined behaviour in ptarray_segmentize2d (Raúl Marín)
   - #4176, ST_Intersects supports GEOMETRYCOLLECTION (Darafei Praliaskouski)
+  - #4177, Postgres 12 disallows variable length arrays in C (Laurenz Albe)
 
 PostGIS 2.5.0rc1
 2018/08/19
index 380e0a1d4b9c8586c2a6d20bf10b25db03a991e5..971705559450009320b83d6a9e26161350cb9b8e 100644 (file)
@@ -740,6 +740,8 @@ nd_box_ratio(const ND_BOX *b1, const ND_BOX *b2, int ndims)
        return ivol / vol2;
 }
 
+/* How many bins shall we use in figuring out the distribution? */
+#define NUM_BINS 50
 
 /**
 * Calculate how much a set of boxes is homogenously distributed
@@ -759,10 +761,8 @@ nd_box_ratio(const ND_BOX *b1, const ND_BOX *b2, int ndims)
 static int
 nd_box_array_distribution(const ND_BOX **nd_boxes, int num_boxes, const ND_BOX *extent, int ndims, double *distribution)
 {
-       /* How many bins shall we use in figuring out the distribution? */
-       static int num_bins = 50;
        int d, i, k, range;
-       int counts[num_bins];
+       int counts[NUM_BINS];
        double smin, smax;   /* Spatial min, spatial max */
        double swidth;       /* Spatial width of dimension */
 #if POSTGIS_DEBUG_LEVEL >= 3
@@ -775,7 +775,7 @@ nd_box_array_distribution(const ND_BOX **nd_boxes, int num_boxes, const ND_BOX *
        for ( d = 0; d < ndims; d++ )
        {
                /* Initialize counts for this dimension */
-               memset(counts, 0, sizeof(int)*num_bins);
+               memset(counts, 0, sizeof(int)*NUM_BINS);
 
                smin = extent->min[d];
                smax = extent->max[d];
@@ -809,8 +809,8 @@ nd_box_array_distribution(const ND_BOX **nd_boxes, int num_boxes, const ND_BOX *
                        }
 
                        /* What bins does this range correspond to? */
-                       bmin = num_bins * (minoffset) / swidth;
-                       bmax = num_bins * (maxoffset) / swidth;
+                       bmin = NUM_BINS * (minoffset) / swidth;
+                       bmax = NUM_BINS * (maxoffset) / swidth;
 
                        POSTGIS_DEBUGF(4, " dimension %d, feature %d: bin %d to bin %d", d, i, bmin, bmax);
 
@@ -823,11 +823,11 @@ nd_box_array_distribution(const ND_BOX **nd_boxes, int num_boxes, const ND_BOX *
                }
 
                /* How dispersed is the distribution of features across bins? */
-               range = range_quintile(counts, num_bins);
+               range = range_quintile(counts, NUM_BINS);
 
 #if POSTGIS_DEBUG_LEVEL >= 3
-               average = avg(counts, num_bins);
-               sdev = stddev(counts, num_bins);
+               average = avg(counts, NUM_BINS);
+               sdev = stddev(counts, NUM_BINS);
                sdev_ratio = sdev/average;
 
                POSTGIS_DEBUGF(3, " dimension %d: range = %d", d, range);