From: Paul Fox Date: Thu, 8 May 2014 15:31:56 +0000 (-0400) Subject: eliminate use of fgets() from calculate_digest() in mhbuildsbr.c X-Git-Url: https://diplodocus.org/git/nmh/commitdiff_plain/fd9489252d1383a388e7c4628557d0b1aaee91d9?ds=inline eliminate use of fgets() from calculate_digest() in mhbuildsbr.c --- diff --git a/uip/mhbuildsbr.c b/uip/mhbuildsbr.c index dc0f407a..3cdea761 100644 --- a/uip/mhbuildsbr.c +++ b/uip/mhbuildsbr.c @@ -1757,7 +1757,7 @@ static char * calculate_digest (CT ct, int asciiP) { int cc; - char buffer[BUFSIZ], *vp, *op; + char *vp, *op; unsigned char *dp; unsigned char digest[16]; unsigned char outbuf[25]; @@ -1775,20 +1775,24 @@ calculate_digest (CT ct, int asciiP) /* calculate md5 message digest */ if (asciiP) { - while (fgets (buffer, sizeof(buffer) - 1, in)) { + char *bufp = NULL; + size_t buflen; + ssize_t gotlen; + while ((gotlen = getline(&bufp, &buflen, in)) != -1) { char c, *cp; - cp = buffer + strlen (buffer) - 1; + cp = bufp + gotlen - 1; if ((c = *cp) == '\n') - *cp = '\0'; + gotlen--; - MD5Update (&mdContext, (unsigned char *) buffer, - (unsigned int) strlen (buffer)); + MD5Update (&mdContext, (unsigned char *) bufp, + (unsigned int) gotlen); if (c == '\n') MD5Update (&mdContext, (unsigned char *) "\r\n", 2); } } else { + char buffer[BUFSIZ]; while ((cc = fread (buffer, sizeof(*buffer), sizeof(buffer), in)) > 0) MD5Update (&mdContext, (unsigned char *) buffer, (unsigned int) cc); }