use the libc interface instead of rolling it by hand.
Index: parse.c
===================================================================
RCS file: /var/cvs/src/usr.bin/hexdump/parse.c,v
retrieving revision 1.21
diff -u -p -r1.21 parse.c
--- parse.c 24 Aug 2016 03:13:45 -0000 1.21
+++ parse.c 24 Aug 2016 05:23:47 -0000
@@ -147,8 +147,7 @@ add(const char *fmt)
for (savep = ++p; *p != '"';)
if (*p++ == 0)
badfmt(fmt);
- tfu->fmt = strndup(savep, p - savep);
- if (tfu->fmt == NULL)
+ if ((tfu->fmt = strndup(savep, p - savep)) == NULL)
err(1, NULL);
escape(tfu->fmt);
p++;
@@ -219,7 +218,6 @@ rewrite(FS *fs)
char *p1, *p2;
char savech, *fmtp, cs[4];
int nconv, prec;
- size_t len;
nextpr = NULL;
prec = 0;
@@ -408,10 +406,8 @@ rewrite(FS *fs)
*/
savech = *p2;
p1[0] = '\0';
- len = strlen(fmtp) + strlen(cs) + 1;
- if ((pr->fmt = calloc(1, len)) == NULL)
+ if (asprintf(&pr->fmt, "%s%s", fmtp, cs) == -1)
err(1, NULL);
- snprintf(pr->fmt, len, "%s%s", fmtp, cs);
*p2 = savech;
pr->cchar = pr->fmt + (p1 - fmtp);
fmtp = p2;