Reset filter on setup. (reset): When resetting qp encoding, set the state
2000-07-13 Not Zed <NotZed@HelixCode.com> * camel-mime-filter-basic.c (camel_mime_filter_basic_new_type): Reset filter on setup. (reset): When resetting qp encoding, set the state to -1, instead of 0. * camel-mime-utils.c (quoted_encode_step): Actually count the characters output sofar (it never counted any). Bunch of other fixes. (quoted_encode_close): Also flush out final character, if ther's one. svn path=/trunk/; revision=4135
This commit is contained in:
@ -1,3 +1,16 @@
|
||||
2000-07-13 Not Zed <NotZed@HelixCode.com>
|
||||
|
||||
* camel-mime-filter-basic.c (camel_mime_filter_basic_new_type):
|
||||
Reset filter on setup.
|
||||
(reset): When resetting qp encoding, set the state to -1, instead
|
||||
of 0.
|
||||
|
||||
* camel-mime-utils.c (quoted_encode_step): Actually count the
|
||||
characters output sofar (it never counted any). Bunch of other
|
||||
fixes.
|
||||
(quoted_encode_close): Also flush out final character, if ther's
|
||||
one.
|
||||
|
||||
2000-07-12 Jeffrey Stedfast <fejj@helixcode.com>
|
||||
|
||||
Chris forgot to add #include <e-util/e-util.h> to the source files
|
||||
|
||||
@ -67,7 +67,13 @@ reset(CamelMimeFilter *mf)
|
||||
{
|
||||
CamelMimeFilterBasic *f = (CamelMimeFilterBasic *)mf;
|
||||
|
||||
f->state = 0;
|
||||
switch(f->type) {
|
||||
case CAMEL_MIME_FILTER_BASIC_QP_ENC:
|
||||
f->state = -1;
|
||||
break;
|
||||
default:
|
||||
f->state = 0;
|
||||
}
|
||||
f->save = 0;
|
||||
}
|
||||
|
||||
@ -214,6 +220,7 @@ camel_mime_filter_basic_new_type(CamelMimeFilterBasicType type)
|
||||
new = NULL;
|
||||
break;
|
||||
}
|
||||
camel_mime_filter_reset((CamelMimeFilter *)new);
|
||||
return new;
|
||||
}
|
||||
|
||||
|
||||
@ -1,6 +1,7 @@
|
||||
/*
|
||||
* Copyright (C) 2000 Helix Code Inc.
|
||||
*
|
||||
* this is a line ending in spaces
|
||||
* and this line only contains spaces no tabs
|
||||
* Authors: Michael Zucchi <notzed@helixcode.com>
|
||||
* Jeffrey Stedfast <fejj@helixcode.com>
|
||||
*
|
||||
@ -509,55 +510,106 @@ int
|
||||
quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state, int *save)
|
||||
{
|
||||
register unsigned char *outptr = out;
|
||||
int last;
|
||||
|
||||
if (len>0)
|
||||
outptr += quoted_encode_step(in, len, outptr, state, save);
|
||||
|
||||
last = *state;
|
||||
if (last != -1) {
|
||||
/* space/tab must be encoded if its the last character on
|
||||
the line */
|
||||
if (is_qpsafe(last) && last!=' ' && last!=9) {
|
||||
*outptr++ = last;
|
||||
} else {
|
||||
*outptr++ = '=';
|
||||
*outptr++ = tohex[(last>>4) & 0xf];
|
||||
*outptr++ = tohex[last & 0xf];
|
||||
}
|
||||
}
|
||||
|
||||
/* hmm, not sure if this should really be added here, we dont want
|
||||
to add it to the content, afterall ...? */
|
||||
*outptr++ = '\n';
|
||||
|
||||
*save = 0;
|
||||
*state = 0;
|
||||
*state = -1;
|
||||
|
||||
return outptr-out;
|
||||
}
|
||||
|
||||
/*
|
||||
FIXME: does not handle trailing spaces/tabs before end of line
|
||||
*/
|
||||
int
|
||||
quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *state, int *save)
|
||||
quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *statep, int *save)
|
||||
{
|
||||
register unsigned char *inptr, *outptr, *inend;
|
||||
unsigned char c;
|
||||
register int sofar = *state;
|
||||
unsigned char c=0x100;
|
||||
register int sofar = *save, /* keeps track of how many chars on a line */
|
||||
last=*statep; /* keeps track if last char to end was a space cr etc */
|
||||
|
||||
inptr = in;
|
||||
inend = in+len;
|
||||
outptr = out;
|
||||
while (inptr<inend) {
|
||||
c = *inptr++;
|
||||
if (is_qpsafe(c)) {
|
||||
/* check for soft line-break */
|
||||
if ((++sofar)>74) {
|
||||
*outptr++='=';
|
||||
*outptr++='\n';
|
||||
sofar = 1;
|
||||
if (c=='\r') {
|
||||
if (last != -1) {
|
||||
*outptr++ = '=';
|
||||
*outptr++ = tohex[(last>>4) & 0xf];
|
||||
*outptr++ = tohex[last & 0xf];
|
||||
sofar+=3;
|
||||
}
|
||||
*outptr++=c;
|
||||
last = c;
|
||||
} else if (c=='\n') {
|
||||
if (last != -1 && last!='\r') {
|
||||
*outptr++ = '=';
|
||||
*outptr++ = tohex[(last>>4) & 0xf];
|
||||
*outptr++ = tohex[last & 0xf];
|
||||
}
|
||||
*outptr++ = '\n';
|
||||
sofar=0;
|
||||
last = -1;
|
||||
} else {
|
||||
if ((++sofar)>72) {
|
||||
*outptr++='=';
|
||||
*outptr++='\n';
|
||||
sofar = 3;
|
||||
if (last != -1) {
|
||||
if (is_qpsafe(last)) {
|
||||
*outptr++ = last;
|
||||
sofar++;
|
||||
} else {
|
||||
*outptr++ = '=';
|
||||
*outptr++ = tohex[(last>>4) & 0xf];
|
||||
*outptr++ = tohex[last & 0xf];
|
||||
sofar+=3;
|
||||
}
|
||||
}
|
||||
if (is_qpsafe(c)) {
|
||||
if (sofar>74) {
|
||||
*outptr++='=';
|
||||
*outptr++='\n';
|
||||
sofar = 0;
|
||||
}
|
||||
/* delay output of space */
|
||||
if (c==' ' || c==0x09) {
|
||||
last = c;
|
||||
} else {
|
||||
*outptr++=c;
|
||||
sofar++;
|
||||
last = -1;
|
||||
}
|
||||
} else {
|
||||
if (sofar>72) {
|
||||
*outptr++='=';
|
||||
*outptr++='\n';
|
||||
sofar = 3;
|
||||
} else
|
||||
sofar += 3;
|
||||
*outptr++ = '=';
|
||||
*outptr++ = tohex[(c>>4) & 0xf];
|
||||
*outptr++ = tohex[c & 0xf];
|
||||
last = -1;
|
||||
}
|
||||
*outptr++ = '=';
|
||||
*outptr++ = tohex[(c>>4) & 0xf];
|
||||
*outptr++ = tohex[c & 0xf];
|
||||
}
|
||||
}
|
||||
*state = sofar;
|
||||
*save = sofar;
|
||||
*statep = last;
|
||||
return outptr-out;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user