X-Git-Url: http://mj.ucw.cz/gitweb/?a=blobdiff_plain;f=cm.c;h=9a38a1d7a0252e2444009d7a3152676ac5a62663;hb=f790f8303362f85c84b46f2f98bdfdce2df793bf;hp=e14c8fa2ba937dbadf6a2d64331c05b9dc4fc27c;hpb=c90422792b24b88bab8797ac6bb1e511c9ba0b79;p=checkmail.git diff --git a/cm.c b/cm.c index e14c8fa..9a38a1d 100644 --- a/cm.c +++ b/cm.c @@ -354,6 +354,27 @@ mb_check(const char *p, int len) return 1; } +static void +mb_skip(int len) +{ + while (len) + { + int avail = mb_end - mb_cc; + if (!avail) + { + if (mb_ll_get() < 0) + return; + len--; + } + else + { + int next = (avail < len) ? avail : len; + len -= next; + mb_cc += next; + } + } +} + static void scan_mbox(struct mbox *b, struct stat *st) { @@ -454,6 +475,7 @@ scan_mbox(struct mbox *b, struct stat *st) while ((c = mb_get()) >= 0 && c != '\n') ; + int content_length = -1; int new = 1; int flagged = 0; sender[0] = 0; @@ -499,6 +521,8 @@ scan_mbox(struct mbox *b, struct stat *st) strcpy(sender, buf+5); else if (!strncasecmp(buf, "Subject:", 8)) strcpy(subject, buf+8); + else if (!strncasecmp(buf, "Content-Length:", 15)) + content_length = atoi(buf + 15); } b->total++; @@ -507,13 +531,16 @@ scan_mbox(struct mbox *b, struct stat *st) if (flagged) b->flagged++; if (debug_mode > 1) - debug("new=%d flagged=%d sender=<%s> subject=<%s>\n", new, flagged, sender, subject); + debug("new=%d flagged=%d len=%d sender=<%s> subject=<%s>\n", new, flagged, content_length, sender, subject); if (new || (flagged && !b->snippet_is_new)) { b->snippet_is_new = new; prepare_snippets(b, sender, subject); } + if (content_length >= 0) + mb_skip(content_length); + int ct = 1; while (from[ct]) {