From c59d22d58cd0bbeeac4622b99088a1cb7d2fde20 Mon Sep 17 00:00:00 2001 From: Stephan Bosch Date: Sun, 23 Oct 2016 13:29:43 +0200 Subject: [PATCH] lib-mail: Gave message_part_data its own field in struct message_part. --- src/lib-imap/imap-bodystructure.c | 26 +++++++++++++------------- src/lib-imap/imap-bodystructure.h | 12 ++++++------ src/lib-mail/message-part.h | 4 ++++ src/lib-storage/index/index-mail.c | 4 ++-- 4 files changed, 25 insertions(+), 21 deletions(-) diff --git a/src/lib-imap/imap-bodystructure.c b/src/lib-imap/imap-bodystructure.c index 69ff53fbf5..b3d0ed27c8 100644 --- a/src/lib-imap/imap-bodystructure.c +++ b/src/lib-imap/imap-bodystructure.c @@ -238,16 +238,16 @@ void imap_bodystructure_parse_header(pool_t pool, struct message_part *part, bool parent_rfc822; if (hdr == NULL) { - if (part->context == NULL) { + if (part->data == NULL) { /* no Content-* headers. add an empty context structure anyway. */ - part->context = part_data = + part->data = part_data = p_new(pool, struct message_part_data, 1); part_data->pool = pool; } else if ((part->flags & MESSAGE_PART_FLAG_IS_MIME) == 0) { /* If there was no Mime-Version, forget all the Content-stuff */ - part_data = part->context; + part_data = part->data; envelope = part_data->envelope; i_zero(part_data); @@ -265,13 +265,13 @@ void imap_bodystructure_parse_header(pool_t pool, struct message_part *part, if (!parent_rfc822 && strncasecmp(hdr->name, "Content-", 8) != 0) return; - if (part->context == NULL) { + if (part->data == NULL) { /* initialize message part data */ - part->context = part_data = + part->data = part_data = p_new(pool, struct message_part_data, 1); part_data->pool = pool; } - part_data = part->context; + part_data = part->data; if (strncasecmp(hdr->name, "Content-", 8) == 0) { T_BEGIN { @@ -334,7 +334,7 @@ part_write_bodystructure_data_common(struct message_part_data *data, static void part_write_body_multipart(const struct message_part *part, string_t *str, bool extended) { - struct message_part_data *data = part->context; + struct message_part_data *data = part->data; if (part->children != NULL) imap_bodystructure_write_siblings(part->children, str, extended); @@ -370,7 +370,7 @@ static void part_write_body_multipart(const struct message_part *part, static void part_write_body(const struct message_part *part, string_t *str, bool extended) { - struct message_part_data *data = part->context; + struct message_part_data *data = part->data; bool text; if ((part->flags & MESSAGE_PART_FLAG_MESSAGE_RFC822) != 0) { @@ -423,7 +423,7 @@ static void part_write_body(const struct message_part *part, i_assert(part->children != NULL); i_assert(part->children->next == NULL); - child_data = part->children->context; + child_data = part->children->data; str_append(str, " ("); if (child_data->envelope_str != NULL) @@ -450,7 +450,7 @@ static void part_write_body(const struct message_part *part, bool imap_bodystructure_is_plain_7bit(const struct message_part *part) { - const struct message_part_data *data = part->context; + const struct message_part_data *data = part->data; i_assert(part->parent == NULL); @@ -700,9 +700,9 @@ imap_bodystructure_parse_args(const struct imap_arg *args, pool_t pool, uoff_t vsize; bool multipart, text, message_rfc822; - i_assert(part->context == NULL); + i_assert(part->data == NULL); - part->context = data = p_new(pool, struct message_part_data, 1); + part->data = data = p_new(pool, struct message_part_data, 1); data->pool = pool; multipart = FALSE; @@ -841,7 +841,7 @@ imap_bodystructure_parse_args(const struct imap_arg *args, pool_t pool, } str_truncate(tmpstr, 0); imap_write_envelope(list_args, tmpstr); - child_data = part->children->context; + child_data = part->children->data; child_data->envelope_str = p_strdup(pool, str_c(tmpstr)); args += 2; diff --git a/src/lib-imap/imap-bodystructure.h b/src/lib-imap/imap-bodystructure.h index a1866747ac..5fef7c7265 100644 --- a/src/lib-imap/imap-bodystructure.h +++ b/src/lib-imap/imap-bodystructure.h @@ -24,7 +24,7 @@ struct message_part_data { struct message_part; struct message_header_line; -/* Parse a single header. Note that this modifies part->context. */ +/* Parse a single header. Note that this modifies part->data. */ void imap_bodystructure_parse_header(pool_t pool, struct message_part *part, struct message_header_line *hdr); @@ -33,14 +33,14 @@ void imap_bodystructure_parse_header(pool_t pool, struct message_part *part, bool imap_bodystructure_is_plain_7bit(const struct message_part *part) ATTR_PURE; -/* Write a BODY/BODYSTRUCTURE from given message_part. The - message_part->contexts must contain struct message_part_data. - part->body_size.virtual_size and .lines are also used for writing it. */ +/* Write a BODY/BODYSTRUCTURE from given message_part. The message_part->data + field must be set. part->body_size.virtual_size and .lines are also used + for writing it. */ void imap_bodystructure_write(const struct message_part *part, string_t *dest, bool extended); -/* Parse BODYSTRUCTURE and save the contents to message_part->contexts. - Returns 0 if ok, -1 if bodystructure wasn't valid. */ +/* Parse BODYSTRUCTURE and save the contents to message_part->data for each + message tree node. Returns 0 if ok, -1 if bodystructure wasn't valid. */ int imap_bodystructure_parse(const char *bodystructure, pool_t pool, struct message_part *parts, const char **error_r); diff --git a/src/lib-mail/message-part.h b/src/lib-mail/message-part.h index b6b01e6da6..36d9da9b6e 100644 --- a/src/lib-mail/message-part.h +++ b/src/lib-mail/message-part.h @@ -3,6 +3,8 @@ #include "message-size.h" +struct message_part_data; + /* Note that these flags are used directly by message-parser-serialize, so existing flags can't be changed without breaking backwards compatibility */ enum message_part_flags { @@ -31,6 +33,8 @@ struct message_part { struct message_size header_size; struct message_size body_size; + struct message_part_data *data; + /* total number of message_parts under children */ unsigned int children_count; enum message_part_flags flags; diff --git a/src/lib-storage/index/index-mail.c b/src/lib-storage/index/index-mail.c index 50d486fc1b..ba89597b2f 100644 --- a/src/lib-storage/index/index-mail.c +++ b/src/lib-storage/index/index-mail.c @@ -938,7 +938,7 @@ static void index_mail_cache_dates(struct index_mail *mail) static struct message_part * index_mail_find_first_text_mime_part(struct message_part *parts) { - struct message_part_data *body_data = parts->context; + struct message_part_data *body_data = parts->data; struct message_part *part; i_assert(body_data != NULL); @@ -960,7 +960,7 @@ index_mail_find_first_text_mime_part(struct message_part *parts) for (part = parts->children; part != NULL; part = part->next) { struct message_part_data *sub_body_data = - part->context; + part->data; i_assert(sub_body_data != NULL);