]> diplodocus.org Git - nmh/blobdiff - sbr/m_getfld.c
Alright, things compile now, but don't link yet; need to write the
[nmh] / sbr / m_getfld.c
index 7e92f9e3ef8cd150a2fb429d3b12dfec4989ec3a..4da2f3eeb34c8fd93fb8e2527b7331a7f5a40d22 100644 (file)
@@ -90,7 +90,7 @@
    be parsed as well.  Unfortunately the speed issue finally caught up with
    us since this routine is at the very heart of MH.
 
-   To speed things up considerably, the routine Eom() was made an auxilary
+   To speed things up considerably, the routine Eom() was made an auxiliary
    function called by the macro eom().  Unless we are bursting a maildrop,
    the eom() macro returns FALSE saying we aren't at the end of the
    message.
  * static prototypes
  */
 struct m_getfld_state;
-static int m_Eom (m_getfld_state_t, int);
+static int m_Eom (m_getfld_state_t);
 static char *matchc(int, char *, int, char *);
 
 #define eom(c,s)       (s->msg_style != MS_DEFAULT && \
-                        ((c) == *s->msg_delim && m_Eom(s,c)))
+                        ((c) == *s->msg_delim && m_Eom(s)))
 
 /* This replaces the old approach, with its direct access to stdio
  * internals.  It uses one fread() to load a buffer that we manage.
@@ -217,9 +217,9 @@ static char *matchc(int, char *, int, char *);
  * separate messages in a maildrop, such as mbox "From ".
  *
  * Some of the tests in the test suite assume a MSG_INPUT_SIZE
- * of 4096.
+ * of 8192.
  */
-#define MSG_INPUT_SIZE 4096
+#define MSG_INPUT_SIZE NMH_BUFSIZ
 #define MAX_DELIMITER_SIZE 5
 
 struct m_getfld_state {
@@ -444,29 +444,21 @@ read_more (m_getfld_state_t s) {
    but EOF is typically 0xffffffff. */
 static int
 Getc (m_getfld_state_t s) {
-    if (s->end - s->readpos < 1) {
-       if (read_more (s) == 0) {
-           /* Pretend that we read a character.  That's what stdio does. */
-           ++s->readpos;
-           return EOF;
-       }
+    if (s->end - s->readpos < 1  &&  read_more (s) == 0) {
+        return EOF;
+    } else {
+        ++s->bytes_read;
+        return s->readpos < s->end  ?  (unsigned char) *s->readpos++  :  EOF;
     }
-
-    ++s->bytes_read;
-    return s->readpos < s->end  ?  (unsigned char) *s->readpos++  :  EOF;
 }
 
 static int
 Peek (m_getfld_state_t s) {
-    if (s->end - s->readpos < 1) {
-       if (read_more (s) == 0) {
-           /* Pretend that we read a character.  That's what stdio does. */
-           ++s->readpos;
-           return EOF;
-       }
+    if (s->end - s->readpos < 1  &&  read_more (s) == 0) {
+        return EOF;
+    } else {
+        return s->readpos < s->end  ?  (unsigned char) *s->readpos  :  EOF;
     }
-
-    return s->readpos < s->end  ?  (unsigned char) *s->readpos  :  EOF;
 }
 
 static int
@@ -825,7 +817,7 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
      * separator) or the last char (since the matchc would have found it
      * if it was a real delim).
      */
-    s->pat_map = (char **) calloc (256, sizeof(char *));
+    s->pat_map = (char **) mh_xcalloc (256, sizeof(char *));
 
     for (cp = s->fdelim + 1; cp < s->delimend; cp++ )
        s->pat_map[(unsigned char)*cp] = cp;
@@ -847,7 +839,7 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob)
  */
 
 static int
-m_Eom (m_getfld_state_t s, int c)
+m_Eom (m_getfld_state_t s)
 {
     register int i;
     char text[MAX_DELIMITER_SIZE];
@@ -881,6 +873,7 @@ m_Eom (m_getfld_state_t s, int c)
     }
 
     if (s->msg_style == MS_MBOX) {
+       int c;
        while ((c = Getc (s)) != '\n')
            if (c < 0)
                break;