sField < pFieldEnd;
pField++, sField++)
{
- if (*pField=='\"') quote = 1 - quote;
- if (!quote) {
- if (isspace(*sField))
- {
- *pField = ' ';
- pField++;
+ if ((*sField=='\r') || (*sField=='\n')) {
+ while (isspace(*sField))
sField++;
-
- while ((sField < pFieldEnd) &&
- isspace(*sField))
+ *pField = *sField;
+ }
+ else {
+ if (*sField=='\"') quote = 1 - quote;
+ if (!quote) {
+ if (isspace(*sField))
+ {
+ *pField = ' ';
+ pField++;
sField++;
+
+ while ((sField < pFieldEnd) &&
+ isspace(*sField))
+ sField++;
+ *pField = *sField;
+ }
+ else *pField = *sField;
}
+ else *pField = *sField;
}
- else *pField = *sField;
}
*pField = '\0';
*FieldEnd = pField - 1;
if (*pos == ':') colonpos = pos;
}
- if (colonpos < 0) return(0); /* no colon? not a valid header line */
+ if (colonpos == NULL) return(0); /* no colon? not a valid header line */
len = end - beg;
key = malloc(len + 2);
valueend = key + len;
* ( key + (colonpos - beg) ) = '\0';
value = &key[(colonpos - beg) + 1];
+/* printf("Header: [%s]\nValue: [%s]\n", key, value); */
unfold_rfc822_field(&value, &valueend);
- valuelen = valueend - value;
+ valuelen = valueend - value + 1;
+/* printf("UnfoldedValue: [%s]\n", value); */
/*
* Here's the big rfc822-to-citadel loop.
/* Strip the field out of the RFC822 header if we used it */
if (!converted) {
StrBufAppendBufPlain(OtherHeaders, beg, end - beg, 0);
+ StrBufAppendBufPlain(OtherHeaders, HKEY("\n"), 0);
}
/* If we've hit the end of the message, bail out */
if (pos >= totalend)
alldone = 1;
}
+ StrBufAppendBufPlain(OtherHeaders, HKEY("\n"), 0);
if (pos < totalend)
StrBufAppendBufPlain(OtherHeaders, pos, totalend - pos, 0);
FreeStrBuf(rfc822);
* The caller is responsible for freeing the returned buffer. If the requested
* field is not present, or anything else goes wrong, it returns NULL.
*/
-char *rfc822_fetch_field(char *rfc822, char *fieldname) {
+char *rfc822_fetch_field(const char *rfc822, const char *fieldname) {
char *fieldbuf = NULL;
- char *end_of_headers;
- char *field_start;
- char *ptr;
+ const char *end_of_headers;
+ const char *field_start;
+ const char *ptr;
char *cont;
char fieldhdr[SIZ];