X-Git-Url: https://diplodocus.org/git/nmh/blobdiff_plain/c6f2d14d9c38345075629af3487c2de491584ca1..6420adb9d93a17d3d16ae17bb67b012273fa0e8d:/sbr/m_getfld.c diff --git a/sbr/m_getfld.c b/sbr/m_getfld.c index 2e1ed998..6d5f04f0 100644 --- a/sbr/m_getfld.c +++ b/sbr/m_getfld.c @@ -463,19 +463,17 @@ static int Peek (m_getfld_state_t s) { 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 Ungetc (int c, m_getfld_state_t s) { if (s->readpos == s->msg_buf) { return EOF; - } else { - --s->bytes_read; - return *--s->readpos = (unsigned char) c; } + --s->bytes_read; + return *--s->readpos = (unsigned char) c; } @@ -583,13 +581,17 @@ m_getfld (m_getfld_state_t *gstate, char name[NAMESZ], char *buf, int *bufsz, memcpy (buf, name, n - 1); buf[n - 1] = '\n'; buf[n] = '\0'; + /* Indicate this wasn't a header field using a character + that can't appear in a header field. */ + name[0] = ':'; /* The last character read was '\n'. s->bytes_read (and n) include that, but it was not put into the name array in the for loop above. So subtract 1. */ *bufsz = --s->bytes_read; /* == n - 1 */ leave_getfld (s); return s->state = BODY; - } else if (max <= n) { + } + if (max <= n) { /* By design, the loop above discards the last character it had read. It's in c, use it. */ *cp++ = c;