summaryrefslogtreecommitdiff
path: root/devel/gpc/files/patch-alloca
diff options
context:
space:
mode:
Diffstat (limited to 'devel/gpc/files/patch-alloca')
-rw-r--r--devel/gpc/files/patch-alloca65
1 files changed, 65 insertions, 0 deletions
diff --git a/devel/gpc/files/patch-alloca b/devel/gpc/files/patch-alloca
new file mode 100644
index 000000000000..6b45ec7a48db
--- /dev/null
+++ b/devel/gpc/files/patch-alloca
@@ -0,0 +1,65 @@
+Use alloca() instead of malloc()/free(), where it is easy to do.
+
+Use BSD's err() instead of fprintf()/exit() on fatal failures.
+
+When so exiting, use non-zero code to signal a failure.
+
+ -mi
+
+--- gpc.c Fri Dec 17 10:39:26 2004
++++ gpc.c Sat Oct 22 04:04:31 2005
+@@ -39,4 +39,5 @@ Copyright: (C) 1997-2004, Advanced Inter
+
+ #include "gpc.h"
++#include <err.h>
+ #include <stdlib.h>
+ #include <float.h>
+@@ -104,6 +105,6 @@ Copyright: (C) 1997-2004, Advanced Inter
+ #define MALLOC(p, b, s, t) {if ((b) > 0) { \
+ p= (t*)malloc(b); if (!(p)) { \
+- fprintf(stderr, "gpc malloc failure: %s\n", s); \
+- exit(0);}} else p= NULL;}
++ err(1, "gpc: %s needed %zd bytes\n", s, \
++ (size_t)b); }} else p= NULL;}
+
+ #define FREE(p) {if (p) {free(p); (p)= NULL;}}
+@@ -965,6 +966,5 @@ static void minimax_test(gpc_polygon *su
+ c_bbox= create_contour_bboxes(clip);
+
+- MALLOC(o_table, subj->num_contours * clip->num_contours * sizeof(int),
+- "overlap table creation", int);
++ o_table = alloca(subj->num_contours * clip->num_contours * sizeof(int));
+
+ /* Check all subject contour bounding boxes against clip boxes */
+@@ -1006,5 +1006,4 @@ static void minimax_test(gpc_polygon *su
+ FREE(s_bbox);
+ FREE(c_bbox);
+- FREE(o_table);
+ }
+
+@@ -1166,5 +1165,5 @@ void gpc_polygon_clip(gpc_op op, gpc_pol
+
+ /* Build scanbeam table from scanbeam tree */
+- MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation", double);
++ sbt = alloca(sbt_entries * sizeof(double));
+ build_sbt(&scanbeam, sbt, sbtree);
+ scanbeam= 0;
+@@ -1749,5 +1748,4 @@ void gpc_polygon_clip(gpc_op op, gpc_pol
+ FREE(c_heap);
+ FREE(s_heap);
+- FREE(sbt);
+ }
+
+@@ -1825,5 +1823,5 @@ void gpc_tristrip_clip(gpc_op op, gpc_po
+
+ /* Build scanbeam table from scanbeam tree */
+- MALLOC(sbt, sbt_entries * sizeof(double), "sbt creation", double);
++ sbt = alloca(sbt_entries * sizeof(double));
+ build_sbt(&scanbeam, sbt, sbtree);
+ scanbeam= 0;
+@@ -2463,5 +2461,4 @@ void gpc_tristrip_clip(gpc_op op, gpc_po
+ FREE(c_heap);
+ FREE(s_heap);
+- FREE(sbt);
+ }
+