]> granicus.if.org Git - graphviz/commitdiff
core plugin fig_bezier: use an agxbuf to simplify some code
authorMatthew Fernandez <matthew.fernandez@gmail.com>
Mon, 2 Jan 2023 02:47:13 +0000 (18:47 -0800)
committerMatthew Fernandez <matthew.fernandez@gmail.com>
Sat, 14 Jan 2023 17:56:12 +0000 (09:56 -0800)
Gitlab: #1950

plugin/core/gvrender_core_fig.c

index 58454f355bf1592e538984d37f3ee6bc0c7b039f..8027e78257e7d3181b107db2596d806b40fc735b 100644 (file)
@@ -319,7 +319,6 @@ static void fig_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start,
     int cap_style = 0;
     int forward_arrow = 0;
     int backward_arrow = 0;
-    int npoints = n;
     int i;
 
 
@@ -327,17 +326,10 @@ static void fig_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start,
     point p;
     int j, step;
     int count = 0;
-    int size;
 
-    char *buffer;
-    char *buf;
+    agxbuf buf = {0};
     assert (n >= 4);
 
-       buffer =
-        malloc((npoints + 1) * (BEZIERSUBDIVISION +
-                                1) * 20 * sizeof(char));
-    buf = buffer;
-
     fig_line_style(obj, &line_style, &style_val);
 
     if (filled) {
@@ -355,8 +347,7 @@ static void fig_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start,
     /* Write first point in line */
     count++;
     PF2P(A[0], p);
-    size = sprintf(buf, " %d %d", p.x, p.y);
-    buf += size;
+    agxbprint(&buf, " %d %d", p.x, p.y);
     /* write subsequent points */
     for (i = 0; i + 3 < n; i += 3) {
         V[0] = V[3];
@@ -368,8 +359,7 @@ static void fig_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start,
             count++;
             pf = Bezier (V, 3, (double) step / BEZIERSUBDIVISION, NULL, NULL);
            PF2P(pf, p);
-            size = sprintf(buf, " %d %d", p.x, p.y);
-            buf += size;
+            agxbprint(&buf, " %d %d", p.x, p.y);
         }
     }
 
@@ -385,8 +375,8 @@ static void fig_bezier(GVJ_t * job, pointf * A, int n, int arrow_at_start,
             area_fill,
             style_val, cap_style, forward_arrow, backward_arrow, count);
 
-    gvprintf(job, " %s\n", buffer);      /* print points */
-    free(buffer);
+    gvprintf(job, " %s\n", agxbuse(&buf));      /* print points */
+    agxbfree(&buf);
     for (i = 0; i < count; i++) {
         gvprintf(job, " %d", i % (count - 1) ? 1 : 0);   /* -1 on all */
     }