statdump: use standard I/O functions for buffering - bmf - bmf (Bayesian Mail Filter) 0.9.4 fork + patches
(HTM) git clone git://git.codemadness.org/bmf
(DIR) Log
(DIR) Files
(DIR) Refs
(DIR) README
(DIR) LICENSE
---
(DIR) commit e39d60975a228c3d1e5b9512e082fb8bb1c28001
(DIR) parent 24fa4a0c3c143c6f36f1ca08b41135156c68f9ff
(HTM) Author: Hiltjo Posthuma <hiltjo@codemadness.org>
Date: Thu, 8 Nov 2018 18:12:36 +0100
statdump: use standard I/O functions for buffering
+ fix undefined behaviour with tolower() and ugly sprintf() buffering.
Diffstat:
M filt.c | 24 +++++++-----------------
1 file changed, 7 insertions(+), 17 deletions(-)
---
(DIR) diff --git a/filt.c b/filt.c
@@ -22,31 +22,21 @@
/* Dump the contents of a statistics structure */
void
-statdump(stats_t * pstat, int fd)
+statdump(stats_t * pstat, FILE *fp)
{
- char iobuf[IOBUFSIZE];
- char *p;
discrim_t *pp;
+ size_t i;
- p = iobuf;
- p += sprintf(iobuf, "# Spamicity: %f\n", pstat->spamicity);
+ fprintf(fp, "# Spamicity: %f\n", pstat->spamicity);
for (pp = pstat->extrema; pp < pstat->extrema + pstat->keepers; pp++) {
if (pp->key.len) {
- strcpy(p, "# '");
- p += 3;
- strncpylwr(p, pp->key.p, pp->key.len);
- p += pp->key.len;
- p += snprintf(p, 28, "' -> %f\n", pp->prob);
- if (p + MAXWORDLEN + 32 > (iobuf + 1)) {
- write(fd, iobuf, p - iobuf);
- p = iobuf;
- }
+ fprintf(fp, "# '");
+ for (i = 0; i < pp->key.len; i++)
+ fputc(tolower((unsigned char)pp->key.p[i]), fp);
+ fprintf(fp, "' -> %f\n", pp->prob);
}
}
- if (p != iobuf) {
- write(fd, iobuf, p - iobuf);
- }
}
void