GPtrArray *headers;
Header *header;
- g_return_val_if_fail(fp != NULL, NULL);
+ cm_return_val_if_fail(fp != NULL, NULL);
headers = g_ptr_array_new();
while (procheader_get_one_field_asis(buf, sizeof(buf), fp) != -1) {
if ((header = procheader_parse_header(buf)) != NULL)
g_ptr_array_add(headers, header);
- /*
- if (*buf == ':') continue;
- for (p = buf; *p && *p != ' '; p++) {
- if (*p == ':') {
- header = g_new(Header, 1);
- header->name = g_strndup(buf, p - buf);
- p++;
- conv_unmime_header(tmp, sizeof(tmp), p, NULL);
- header->body = g_strdup(tmp);
-
- g_ptr_array_add(headers, header);
- break;
- }
- }
- */
}
return headers;
header->name = "From:"
header->body = "dinh@enseirb.fr"
*/
+static gboolean header_is_addr_field(const gchar *hdr)
+{
+ static char *addr_headers[] = {
+ "To:",
+ "Cc:",
+ "Bcc:",
+ "From:",
+ "Reply-To:",
+ "Followup-To:",
+ "Followup-and-Reply-To:",
+ "Disposition-Notification-To:",
+ "Return-Receipt-To:",
+ NULL};
+ int i;
+
+ if (!hdr)
+ return FALSE;
+
+ for (i = 0; addr_headers[i] != NULL; i++)
+ if (!strcasecmp(hdr, addr_headers[i]))
+ return FALSE;
+
+ return FALSE;
+}
Header * procheader_parse_header(gchar * buf)
{
gchar *p = buf;
Header * header;
+ gboolean addr_field = FALSE;
if ((*buf == ':') || (*buf == ' '))
return NULL;
if ((*p == ':') || (*p == ' ')) {
header = g_new(Header, 1);
header->name = g_strndup(buf, p - buf + 1);
+ addr_field = header_is_addr_field(header->name);
p++;
while (*p == ' ' || *p == '\t') p++;
- header->body = conv_unmime_header(p, NULL);
+ header->body = conv_unmime_header(p, NULL, addr_field);
return header;
}
}
break;
case H_FROM:
if (msginfo->from) break;
- msginfo->from = conv_unmime_header(hp, NULL);
+ msginfo->from = conv_unmime_header(hp, NULL, TRUE);
msginfo->fromname = procheader_get_fromname(msginfo->from);
remove_return(msginfo->from);
remove_return(msginfo->fromname);
break;
case H_TO:
- tmp = conv_unmime_header(hp, NULL);
+ tmp = conv_unmime_header(hp, NULL, TRUE);
remove_return(tmp);
if (msginfo->to) {
p = msginfo->to;
g_free(tmp);
break;
case H_CC:
- tmp = conv_unmime_header(hp, NULL);
+ tmp = conv_unmime_header(hp, NULL, TRUE);
remove_return(tmp);
if (msginfo->cc) {
p = msginfo->cc;
break;
case H_SUBJECT:
if (msginfo->subject) break;
- msginfo->subject = conv_unmime_header(hp, NULL);
+ msginfo->subject = conv_unmime_header(hp, NULL, FALSE);
unfold_line(msginfo->subject);
break;
case H_MSG_ID:
hentry[0].name = header;
- g_return_val_if_fail(msginfo != NULL, -1);
+ cm_return_val_if_fail(msginfo != NULL, -1);
file = procmsg_get_message_file_path(msginfo);
if ((fp = g_fopen(file, "rb")) == NULL) {
FILE_OP_ERROR(file, "fopen");