From f41a593b767cda11b21363f34a7ce4a0acff176e Mon Sep 17 00:00:00 2001 From: Matthew Fernandez Date: Sun, 22 Jan 2023 10:34:31 -0800 Subject: [PATCH] gv2gxl createEdgeId: use an agxbuf to avoid 'sprintf' This leads to clearer and less error prone code. Gitlab: #1950 --- cmd/tools/gv2gxl.c | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/cmd/tools/gv2gxl.c b/cmd/tools/gv2gxl.c index c208e1527..e35b5a72b 100644 --- a/cmd/tools/gv2gxl.c +++ b/cmd/tools/gv2gxl.c @@ -13,6 +13,7 @@ * Contributors: Details at https://graphviz.org *************************************************************************/ +#include #include #include #include @@ -248,21 +249,19 @@ static char *createEdgeId(gxlstate_t * stp, Agedge_t * e) int edgeIdCounter = 1; char *hname = nodeID(stp, AGHEAD(e)); char *tname = nodeID(stp, AGTAIL(e)); - size_t baselen = strlen(hname) + strlen(tname) + sizeof(EDGEOP); - size_t len = baselen + EXTRA; - char *endp; /* where to append ':' and number */ char *rv; - char *bp = gv_calloc(len, sizeof(bp[0])); - endp = bp + (baselen - 1); + agxbuf bp = {0}; - sprintf(bp, "%s%s%s", tname, EDGEOP, hname); - while (idexists(stp->idList, bp)) { - sprintf(endp, ":%d", edgeIdCounter++); + agxbprint(&bp, "%s%s%s", tname, EDGEOP, hname); + char *id_name = agxbuse(&bp); + while (idexists(stp->idList, id_name)) { + agxbprint(&bp, "%s%s%s:%d", tname, EDGEOP, hname, edgeIdCounter++); + id_name = agxbuse(&bp); } - rv = addid(stp->idList, bp); - free(bp); + rv = addid(stp->idList, id_name); + agxbfree(&bp); return rv; } -- 2.50.1