}
}
-static parameter_t *parse_parameters(const char *s)
+static parameters_t *parse_parameters(const char *s)
{
- parameter_t *res = NULL;
- parameter_t **list = &res;
+ parameters_t *res = parameter_new();
while (*s) {
+ char *attr, *val;
const char *p;
- parameter_t *new;
int i;
s = skipspaces(s);
}
i = p - s;
- new = parameter_new();
- new->attribute = p_dupstr(s, i);
+ attr = p_dupstr(s, i);
- while (--i >= 0 && ISSPACE(new->attribute[i])) {
- new->attribute[i] = '\0';
+ while (--i >= 0 && ISSPACE(attr[i])) {
+ attr[i] = '\0';
}
s = skipspaces(p + 1); /* skip over the = */
}
}
- new->value = p_dupstr(buffer, i);
+ val = p_dupstr(buffer, i);
} else {
for (p = s; *p && *p != ' ' && *p != ';'; p++);
- new->value = p_dupstr(s, p - s);
+ val = p_dupstr(s, p - s);
}
- *list = new;
- list = &new->next;
-
+ parameter_setval(res, attr, val);
+ p_delete(&attr);
+ p_delete(&val);
s = strchr(s, ';'); /* Find the next parameter */
if (!s)
break; /* no more parameters */
}
- rfc2231_decode_parameters(&res);
+ rfc2231_decode_parameters(res);
return res;
}
char *subtype;
p_delete(&ct->subtype);
- parameter_list_wipe(&ct->parameter);
+ ct->parameter = NULL;
/* First extract any existing parameters */
if ((pc = strchr(s, ';')) != NULL) {
if (ct->type == TYPETEXT) {
pc = parameter_getval(ct->parameter, "charset");
if (!pc) {
- parameter_setval(&ct->parameter, "charset",
+ parameter_setval(ct->parameter, "charset",
charset_getfirst(mod_cset.assumed_charset));
}
}
/* Check to see if a default filename was given */
if ((s = strchr (s, ';'))) {
- parameter_t *parms = parse_parameters(vskipspaces(s));
+ parameters_t *parms = parse_parameters(vskipspaces(s));
if ((s = parameter_getval(parms, "filename")))
m_strreplace(&ct->filename, s);
if ((s = parameter_getval(parms, "name")))
ct->form_name = m_strdup(s);
-
- parameter_list_wipe(&parms);
}
}
}
p_delete(&line);
- return (body);
+ return body;
}
void mutt_parse_part(FILE *fp, BODY *b)
mutt_parse_part(fp, b);
}
- return (head);
+ return head;
}
/* parses a date string in RFC822 format:
{
struct tm tm;
const char *loc;
- loc = setlocale(LC_TIME, "C");
+ time_t tz;
+ loc = setlocale(LC_ALL, "C");
p_clear(&tm, 1);
if (strptime(s, "%a, %d %b %Y %H:%M:%S %z", &tm))
goto ok;
p_clear(&tm, 1);
if (strptime(s, "%a, %d %b %Y %H:%M %z", &tm))
goto ok;
- setlocale(LC_TIME, loc);
+ setlocale(LC_ALL, "");
return 0;
ok:
- setlocale(LC_TIME, loc);
- return mutt_mktime(&tm, 1);
+ setlocale(LC_ALL, "");
+ tz = tm.tm_gmtoff;
+ return timegm(&tm) - tz;
}
string_list_t **mutt_parse_rfc822_line(ENVELOPE *e, HEADER *hdr, char *line, char *p,
hdr->expired = 1;
break;
-#ifdef USE_NNTP
- case MIME_FOLLOWUP_TO:
- if (!e->followup_to) {
- m_strrtrim(p);
- e->followup_to = m_strdup(skipspaces(p));
- }
- break;
-#endif
-
case MIME_FROM:
e->from = rfc822_parse_adrlist(e->from, p);
/* don't leave from info NULL if there's an invalid address (or
hdr->mime = 1;
break;
-#ifdef USE_NNTP
- case MIME_NEWSGROUPS:
- p_delete(&e->newsgroups);
- m_strrtrim(p);
- e->newsgroups = m_strdup(skipspaces(p));
- break;
-#endif
-
case MIME_ORGANIZATION:
if (!e->organization && mime_which_token(p, -1) == MIME_UNKNOWN)
e->organization = m_strdup(p);
e->x_label = m_strdup(p);
break;
-#ifdef USE_NNTP
- case MIME_XREF:
- if (!e->xref)
- e->xref = m_strdup(p);
- break;
-#endif
-
case MIME_X_STATUS:
if (hdr) {
while (*p) {
return false;
ok:
- if (tp)
- *tp = mutt_mktime(&tm, 1);
+ if (tp) {
+ *tp = tm.tm_gmtoff;
+ *tp = timegm(&tm) - *tp;
+ }
return true;
}