diff options
author | Jeffrey Stedfast <fejj@src.gnome.org> | 2000-05-23 10:57:31 +0800 |
---|---|---|
committer | Jeffrey Stedfast <fejj@src.gnome.org> | 2000-05-23 10:57:31 +0800 |
commit | 924869dd9cd945d7bbab04d4878706acb82734e4 (patch) | |
tree | 569ded94c0d5e76d16b4d5246abaed49a0a13bfd /camel/camel-mime-filter-smtp.c | |
parent | d5999b60c924a3aad5852d33e0fad0dcaa6c266c (diff) | |
download | gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.tar gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.tar.gz gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.tar.bz2 gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.tar.lz gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.tar.xz gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.tar.zst gsoc2013-evolution-924869dd9cd945d7bbab04d4878706acb82734e4.zip |
dude, just stuff
svn path=/trunk/; revision=3166
Diffstat (limited to 'camel/camel-mime-filter-smtp.c')
-rw-r--r-- | camel/camel-mime-filter-smtp.c | 45 |
1 files changed, 30 insertions, 15 deletions
diff --git a/camel/camel-mime-filter-smtp.c b/camel/camel-mime-filter-smtp.c index 1b7320a70f..fe167b9f21 100644 --- a/camel/camel-mime-filter-smtp.c +++ b/camel/camel-mime-filter-smtp.c @@ -64,7 +64,7 @@ camel_mime_filter_smtp_get_type (void) return type; } -typedef enum { FROM_NODE, DOT_NODE } node_t; +typedef enum { EOLN_NODE, FROM_NODE, DOT_NODE } node_t; struct smtpnode { struct smtpnode *next; @@ -85,12 +85,14 @@ static void filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, size_t *outlen, size_t *outprespace) { CamelMimeFilterSmtp *f = (CamelMimeFilterSmtp *)mf; - register char *inptr, *inend; - int left; - int midline = f->midline; - int fromcount = 0; + register gchar *inptr, *inend; + gint left; + gint midline = f->midline; + gint fromcount = 0; + gint dotcount = 0; + gint linecount = 0; struct smtpnode *head = NULL, *tail = (struct smtpnode *)&head, *node; - char *outptr; + gchar *outptr; inptr = in; inend = inptr + len; @@ -106,6 +108,14 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s ; if (c == '\n' || !midline) { + linecount++; + node = alloca(sizeof(*node)); + node->type = EOLN_NODE; + node->pointer = inptr - 1; + node->next = NULL; + tail->next = node; + tail = node; + left = inend - inptr; if (left > 0) { midline = TRUE; @@ -130,8 +140,8 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s tail = node; inptr += 5; } else { - if (!strncmp(inptr, ".\n", 2) || !strncmp(inptr, ".\r\n", 3)) { - fromcount++; + if (!strncmp(inptr, ".\n", 2)) { + dotcount++; node = alloca(sizeof(*node)); node->type = DOT_NODE; node->pointer = inptr; @@ -154,18 +164,24 @@ filter(CamelMimeFilter *mf, char *in, size_t len, size_t prespace, char **out, s f->midline = midline; - if (fromcount > 0) { - camel_mime_filter_set_size(mf, len + fromcount, FALSE); + if (fromcount > 0 || dotcount > 0 || linecount > 0) { + camel_mime_filter_set_size(mf, len + fromcount + dotcount + linecount, FALSE); node = head; inptr = in; outptr = mf->outbuf; while (node) { memcpy(outptr, inptr, node->pointer - inptr); outptr += node->pointer - inptr; - if (node->type == FROM_NODE) - *outptr++ = '>'; - else - *outptr++ = '.'; + if (node->type == EOLN_NODE) { + *outptr++ = '\r'; + *outptr++ = '\n'; + } else { + if (node->type == FROM_NODE) { + *outptr++ = '>'; + } else { + *outptr++ = '.' + } + } inptr = node->pointer; node = node->next; } @@ -242,7 +258,6 @@ int main(int argc, char **argv) gtk_init(&argc, &argv); - f = camel_mime_filter_smtp_new(); buffer = "This is a test\nFrom Someone\nTo someone. From Someone else, From\n From blah\nFromblah\nBye! \nFrom \n.\n.\r\nprevious 2 lines had .'s\nfrom should also be escaped\n"; |