]> granicus.if.org Git - graphviz/commitdiff
core plugin mp_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_mp.c

index 0c71963539fdb413f87b31a3cc9bf3e320b86297..4ba75f3672d8e0ba1dc2bbeb46d33cbfdeb88c69 100644 (file)
@@ -311,21 +311,14 @@ static void mp_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;
 
     pointf pf, V[4];
     point p;
     int j, step;
     int count = 0;
-    int size;
 
-    char *buffer;
-    char *buf;
-    buffer =
-        malloc((npoints + 1) * (BEZIERSUBDIVISION +
-                                1) * 20 * sizeof(char));
-    buf = buffer;
+    agxbuf buf = {0};
 
     mp_line_style(obj, &line_style, &style_val);
 
@@ -344,8 +337,7 @@ static void mp_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];
@@ -357,8 +349,7 @@ static void mp_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);
         }
     }
 
@@ -374,8 +365,8 @@ static void mp_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 */
     }