enum state state;
struct field f = {{0}};
int compnum;
+ char *buf;
CT ct;
HF hp;
state = FLD2;
/* FALL */
case FLD2:
+ if (compnum == 1) {
+ ct->crlf = f.value[f.valuelen-2] == '\r';
+ }
compnum++;
+ /* decode rfc2047 */
+ buf = mh_xcalloc(sizeof(char *), f.valuelen);
+ if (!decode_rfc2047(f.value, buf, f.valuelen)) {
+ mh_free0(&buf);
+ buf = mh_xstrdup(f.value);
+ }
+
/* add the header data to the list */
- add_header(ct, mh_xstrdup(f.name), mh_xstrdup(f.value));
+ add_header(ct, mh_xstrdup(f.name), buf);
+
+ buf = NULL;
ct->c_begin = ftell(in) + 1;
continue;
*++dp = '\0';
/* record boundary separators */
- m->mp_start = concat(bp, "\n", NULL);
- m->mp_stop = concat(bp, "--\n", NULL);
+ if (!ct->crlf) {
+ m->mp_start = concat(bp, "\n", NULL);
+ m->mp_stop = concat(bp, "--\n", NULL);
+ } else {
+ m->mp_start = concat(bp, "\r\n", NULL);
+ m->mp_stop = concat(bp, "--\r\n", NULL);
+ }
+
if (!ct->c_fp && (ct->c_fp = fopen(ct->c_file, "r")) == NULL) {
advise(ct->c_file, "unable to open for reading");