X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/5dd6771b28c257af405d7248639ed0e3bcdce38b..c576ad2674c37a1c63f004c71049998f38854c64:/sbr/snprintb.c diff --git a/sbr/snprintb.c b/sbr/snprintb.c index 5f3f1243..47aea95f 100644 --- a/sbr/snprintb.c +++ b/sbr/snprintb.c @@ -1,6 +1,4 @@ - -/* - * snprintb.c -- snprintf a %b string +/* snprintb.c -- snprintf a %b string * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -13,26 +11,35 @@ char * snprintb (char *buffer, size_t n, unsigned v, char *bits) { - register int i, j; - register char c, *bp; + size_t len; + int i, j; + char c, *bp; snprintf (buffer, n, bits && *bits == 010 ? "0%o" : "0x%x", v); - bp = buffer + strlen(buffer); + len = strlen(buffer); + bp = buffer + len; + n -= len; if (bits && *++bits) { j = 0; *bp++ = '<'; - while ((i = *bits++)) + while ((i = *bits++) && n > 1) if (v & (1 << (i - 1))) { - if (j++) + if (j++ && n > 1) { *bp++ = ','; - for (; (c = *bits) > 32; bits++) + n--; + } + for (; (c = *bits) > 32 && n > 1; bits++) { *bp++ = c; + n--; + } } else for (; *bits > 32; bits++) continue; - *bp++ = '>'; + if (n > 1) + *bp++ = '>'; + *bp = 0; }