X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/1691e80890e5d8ba258c51c214a3e91880e1db2b..159b2a1ede7bd581508e8704112d83efd44e0dfa:/sbr/seq_bits.c diff --git a/sbr/seq_bits.c b/sbr/seq_bits.c index b0f6e6c0..a31b0995 100644 --- a/sbr/seq_bits.c +++ b/sbr/seq_bits.c @@ -1,8 +1,8 @@ - -/* - * seq_bits.c -- return the snprintb() string for a sequence +/* seq_bits.c -- return the snprintb() string for a sequence * - * $Id$ + * This code is Copyright (c) 2002, by the authors of nmh. See the + * COPYRIGHT file in the root directory of the nmh distribution for + * complete copyright information. */ #include @@ -11,16 +11,26 @@ char * seq_bits (struct msgs *mp) { - int i; + size_t i; size_t len; static char buffer[BUFSIZ]; strncpy (buffer, MBITS, sizeof(buffer)); - for (i = 0; mp->msgattrs[i]; i++) { + for (i = 0; i < svector_size (mp->msgattrs); i++) { len = strlen (buffer); snprintf (buffer + len, sizeof(buffer) - len, - "%c%s", FFATTRSLOT + 1 + i, mp->msgattrs[i]); + "%c%s", FFATTRSLOT + 1 + (int) i, + svector_at (mp->msgattrs, i)); + /* + * seq_bits() is used by seq_printdebug(), which passes an + * unsigned int bit vector to snprintb(). So limit the + * size of the return value accordingly. Even worse, + * snprintb() only uses characters up through ASCII space + * as the delimiter (the %c character above). So limit + * based on that. + */ + if ((int) i == ' ' - FFATTRSLOT - 1) break; } return buffer;