X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/8a14191c0a0ad15bb8f35b49748c75c1e0a8c2f4..052d7bfb0a9a541c6975c3ed679dd3ac9e5c0886:/sbr/m_getfld.c?ds=inline diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index f17ad417..e500e24e 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -1,6 +1,4 @@ - -/* - * m_getfld.c -- read/parse a message +/* m_getfld.c -- read/parse a message * * This code is Copyright (c) 2002, by the authors of nmh. See the * COPYRIGHT file in the root directory of the nmh distribution for @@ -202,7 +200,6 @@ /* * static prototypes */ -struct m_getfld_state; static int m_Eom (m_getfld_state_t); #define eom(c,s) (s->msg_style != MS_DEFAULT && \ @@ -667,7 +664,7 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz, max = *bufsz-1; /* Back up and store the current position. */ bp = --s->readpos; - c = s->end - s->readpos < max ? s->end - s->readpos : max; + c = min(s->end - s->readpos, max); if (s->msg_style != MS_DEFAULT && c > 1) { /* * packed maildrop - only take up to the (possible) @@ -778,7 +775,7 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob) s = *gstate; /* - * Figure out what the message delimitter string is for this + * Figure out what the message delimiter string is for this * maildrop. (This used to be part of m_Eom but I didn't like * the idea of an "if" statement that could only succeed on the * first call to m_Eom getting executed on each call, i.e., at @@ -796,9 +793,8 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob) if ((c = Getc (s)) == EOF) { *cp = '\0'; break; - } else { - *cp = c; } + *cp = c; } if (i == sizeof from-1 && strncmp (text, "From ", sizeof from-1) == 0) { @@ -827,16 +823,22 @@ m_unknown(m_getfld_state_t *gstate, FILE *iob) if (s->edelimlen <= 1) adios (NULL, "maildrop delimiter must be at least 2 bytes"); - /* Now malloc'd memory at s->fdelim-1 referenced several times: + /* Now malloc'd memory at s->fdelim-1 is referenced several times, + * containing a copy of the string constant from delimstr. + * + * "\nFrom \0" 7 "\001\001\001\001\n\0" 6 + * | | + * delimstr c=6 delimstr c=5 * - * delimstr "\nFrom " "\001\001\001\001\n" - * c 6 5 - * s->fdelim \0"\n\nFrom " \0"\n\001\001\001\001\n" - * s->fdelimlen 6 5 - * s->msg_delim "\nFrom " "\001\001\001\001\n" - * s->edelim "From " "\001\001\001\n" - * s->edelimlen 5 4 - * s->delimend " " "\n" + * "\0\n\nFrom \0" 9 "\0\n\001\001\001\001\n\0" 8 + * | || | | | | | + * | || s->delimend | | | s->delimend + * | || | | | + * | |s->edelim s->edelimlen=5 | | s->edelim s->edelimlen=4 + * | | | | + * | s->msg_delim | s->msg_delim + * | | + * s->fdelim s->fdelimlen=7 s->fdelim s->fdelimlen=6 */ /* @@ -879,16 +881,15 @@ m_Eom (m_getfld_state_t s) if ((c2 = Getc (s)) == EOF) { *cp = '\0'; break; - } else { - *cp = c2; } + *cp = c2; } if (i != s->edelimlen || strncmp (text, (char *)s->edelim, s->edelimlen)) { if (i == 0 && s->msg_style == MS_MBOX) /* the final newline in the (brain damaged) unix-format - * maildrop is part of the delimitter - delete it. + * maildrop is part of the delimiter - delete it. */ return 1;