]> diplodocus.org Git - nmh/commitdiff
eliminate use of fgets() from calculate_digest() in mhbuildsbr.c
authorPaul Fox <pgf@foxharp.boston.ma.us>
Thu, 8 May 2014 15:31:56 +0000 (11:31 -0400)
committerPaul Fox <pgf@foxharp.boston.ma.us>
Thu, 8 May 2014 16:54:04 +0000 (12:54 -0400)
uip/mhbuildsbr.c

index dc0f407..3cdea76 100644 (file)
@@ -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);
     }