diff options
Diffstat (limited to 'devel/gpc/files/patch-alloca')
-rw-r--r-- | devel/gpc/files/patch-alloca | 65 |
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); + } + |