X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/4f7866121132ca824df3fd6f847fc18f49cfd70b..e65127948:/sbr/m_getfld.c?ds=sidebyside diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index 7e92f9e3..4da2f3ee 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -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. @@ -203,11 +203,11 @@ * 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;