Modified to not encode space chars in the middle of a line. (isblank): New

2000-10-05  Jeffrey Stedfast  <fejj@helixcode.com>

	* camel-mime-utils.c (quoted_encode_step): Modified to not encode
	space chars in the middle of a line.
	(isblank): New macro if we're not on a system with the GNU isblank
	extension.

	* camel-mime-message.c (camel_mime_message_set_from): Reversed my
	changes, don't header_encode_phrase - it generates broken headers.
	(camel_mime_message_set_reply_to): Same.

svn path=/trunk/; revision=5747
This commit is contained in:
Jeffrey Stedfast
2000-10-05 21:26:28 +00:00
committed by Jeffrey Stedfast
parent 6abc02d6b9
commit 19d6689653
3 changed files with 53 additions and 40 deletions

View File

@ -1,3 +1,14 @@
2000-10-05 Jeffrey Stedfast <fejj@helixcode.com>
* camel-mime-utils.c (quoted_encode_step): Modified to not encode
space chars in the middle of a line.
(isblank): New macro if we're not on a system with the GNU isblank
extension.
* camel-mime-message.c (camel_mime_message_set_from): Reversed my
changes, don't header_encode_phrase - it generates broken headers.
(camel_mime_message_set_reply_to): Same.
2000-10-04 Chris Toshok <toshok@helixcode.com>
* providers/nntp/camel-nntp-utils.c (camel_nntp_get_headers):

View File

@ -239,8 +239,6 @@ camel_mime_message_get_sent_date (CamelMimeMessage *message)
void
camel_mime_message_set_reply_to (CamelMimeMessage *mime_message, const gchar *reply_to)
{
char *text;
g_assert (mime_message);
/* FIXME: check format of string, handle it nicer ... */
@ -248,9 +246,8 @@ camel_mime_message_set_reply_to (CamelMimeMessage *mime_message, const gchar *re
g_free (mime_message->reply_to);
mime_message->reply_to = g_strstrip (g_strdup (reply_to));
text = header_encode_phrase (mime_message->reply_to);
CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (mime_message), "Reply-To", text);
g_free (text);
CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (mime_message), "Reply-To",
mime_message->reply_to);
}
const gchar *
@ -288,8 +285,6 @@ camel_mime_message_get_subject (CamelMimeMessage *mime_message)
void
camel_mime_message_set_from (CamelMimeMessage *mime_message, const gchar *from)
{
char *text;
g_assert (mime_message);
/* FIXME: check format of string, handle it nicer ... */
@ -297,9 +292,8 @@ camel_mime_message_set_from (CamelMimeMessage *mime_message, const gchar *from)
g_free (mime_message->from);
mime_message->from = g_strstrip (g_strdup (from));
text = header_encode_phrase (mime_message->from);
CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (mime_message), "From", text);
g_free (text);
CAMEL_MEDIUM_CLASS (parent_class)->set_header (CAMEL_MEDIUM (mime_message), "From",
mime_message->from);
}
const gchar *

View File

@ -140,6 +140,10 @@ enum {
#define is_especial(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_ESPECIAL) != 0)
#define is_psafe(x) ((camel_mime_special_table[(unsigned char)(x)] & IS_PSAFE) != 0)
#ifndef HAVE_ISBLANK
#define isblank(c) ((c) == ' ' || (c) == '\t')
#endif /* HAVE_ISBLANK */
/* only needs to be run to rebuild the tables above */
#ifdef BUILD_TABLE
@ -563,70 +567,73 @@ quoted_encode_close(unsigned char *in, int len, unsigned char *out, int *state,
}
int
quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *statep, 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 = *save, /* keeps track of how many chars on a line */
last=*statep; /* keeps track if last char to end was a space cr etc */
register guchar *inptr, *outptr, *inend;
guchar c;
register int sofar = *save; /* keeps track of how many chars on a line */
register int last = *statep; /* keeps track if last char to end was a space cr etc */
inptr = in;
inend = in+len;
inend = in + len;
outptr = out;
while (inptr<inend) {
while (inptr < inend) {
c = *inptr++;
if (c=='\r') {
if (c == '\r') {
if (last != -1) {
*outptr++ = '=';
*outptr++ = tohex[(last>>4) & 0xf];
*outptr++ = tohex[(last >> 4) & 0xf];
*outptr++ = tohex[last & 0xf];
sofar+=3;
sofar += 3;
}
last = c;
} else if (c=='\n') {
if (last != -1 && last!='\r') {
} else if (c == '\n') {
if (last != -1 && last != '\r') {
*outptr++ = '=';
*outptr++ = tohex[(last>>4) & 0xf];
*outptr++ = tohex[(last >> 4) & 0xf];
*outptr++ = tohex[last & 0xf];
}
*outptr++ = '\n';
sofar=0;
sofar = 0;
last = -1;
} else {
if (last != -1) {
if (is_qpsafe(last)) {
if (is_qpsafe (last) || isblank (last)) {
*outptr++ = last;
sofar++;
} else {
*outptr++ = '=';
*outptr++ = tohex[(last>>4) & 0xf];
*outptr++ = tohex[(last >> 4) & 0xf];
*outptr++ = tohex[last & 0xf];
sofar+=3;
sofar += 3;
}
}
if (is_qpsafe(c)) {
if (sofar>74) {
*outptr++='=';
*outptr++='\n';
if (is_qpsafe (c) || isblank (c)) {
if (sofar > 74) {
*outptr++ = '=';
*outptr++ = '\n';
sofar = 0;
}
/* delay output of space */
if (c==' ' || c==0x09) {
/* delay output of space char */
if (isblank (c)) {
last = c;
} else {
*outptr++=c;
*outptr++ = c;
sofar++;
last = -1;
}
} else {
if (sofar>72) {
*outptr++='=';
*outptr++='\n';
if (sofar > 72) {
*outptr++ = '=';
*outptr++ = '\n';
sofar = 3;
} else
sofar += 3;
*outptr++ = '=';
*outptr++ = tohex[(c>>4) & 0xf];
*outptr++ = tohex[(c >> 4) & 0xf];
*outptr++ = tohex[c & 0xf];
last = -1;
}
@ -634,7 +641,8 @@ quoted_encode_step(unsigned char *in, int len, unsigned char *out, int *statep,
}
*save = sofar;
*statep = last;
return outptr-out;
return (outptr - out);
}
/*