X-Git-Url: http://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Frfc822%2Frfc822.c;h=4a5e4ccdcc709d130fb6c7222ff215d9858e91ac;hp=3bd3dd747ae28f532b4eef592297cc0e9b689d4f;hb=4c5f970e9e233c766699b1958a350ac3d3cb3f33;hpb=de28abde1337e9255812ba720ffeef2c83a25dde diff --git a/ccan/rfc822/rfc822.c b/ccan/rfc822/rfc822.c index 3bd3dd74..4a5e4ccd 100644 --- a/ccan/rfc822/rfc822.c +++ b/ccan/rfc822/rfc822.c @@ -150,29 +150,33 @@ static struct rfc822_header *next_header_parse(struct rfc822_msg *msg) if (msg->body && (msg->remainder >= msg->body)) return NULL; - eh = h = msg->remainder; - do { - eh = next_line(eh, msg->end); - } while ((eh < msg->end) && rfc822_iswsp(*eh)); - - if (eh >= msg->end) - msg->remainder = NULL; - else - msg->remainder = eh; + h = msg->remainder; + eh = next_line(h, msg->end); ev = eh; if ((ev > h) && (ev[-1] == '\n')) ev--; if ((ev > h) && (ev[-1] == '\r')) ev--; - if (ev == h) { /* Found the end of the headers */ + + assert(!msg->body || (msg->body == eh)); + if (eh < msg->end) msg->body = eh; return NULL; } + while ((eh < msg->end) && rfc822_iswsp(*eh)) + eh = next_line(eh, msg->end); + + if (eh >= msg->end) + msg->remainder = NULL; + else + msg->remainder = eh; + + hi = talloc_zero(msg, struct rfc822_header); ALLOC_CHECK(hi, NULL);