static int fetch_registered_part(struct mailprivacy * privacy, int (* fetch_section)(mailmessage *, struct mailmime *, char **, size_t *), struct mailmime * mime, char ** result, size_t * result_len) { mailmessage * dummy_msg; int res; char * content; size_t content_len; int r; dummy_msg = mime_message_init(NULL); if (dummy_msg == NULL) { res = MAIL_ERROR_MEMORY; goto err; } r = mime_message_set_tmpdir(dummy_msg, privacy->tmp_dir); if (r != MAIL_NO_ERROR) { res = MAIL_ERROR_MEMORY; goto free_msg; } r = fetch_section(dummy_msg, mime, &content, &content_len); if (r != MAIL_NO_ERROR) { res = r; goto free_msg; } r = register_result_mmapstr(privacy, content); if (r != MAIL_NO_ERROR) { res = r; goto free_fetch; } mailmessage_free(dummy_msg); * result = content; * result_len = content_len; return MAIL_NO_ERROR; free_fetch: mailmessage_fetch_result_free(dummy_msg, content); free_msg: mailmessage_free(dummy_msg); err: return res; }
int mailmessage_generic_fetch_envelope(mailmessage * msg_info, struct mailimf_fields ** result) { int r; int res; size_t cur_token; char * header; size_t length; struct mailimf_fields * fields; r = mailmessage_fetch_header(msg_info, &header, &length); if (r != MAIL_NO_ERROR) { res = r; goto err; } cur_token = 0; r = mailimf_envelope_fields_parse(header, length, &cur_token, &fields); if (r != MAILIMF_NO_ERROR) { res = maildriver_imf_error_to_mail_error(r); goto free; /* do nothing */ } mailmessage_fetch_result_free(msg_info, header); * result = fields; return MAIL_NO_ERROR; free: mailmessage_fetch_result_free(msg_info, header); err: return res; }
void mailprivacy_msg_fetch_result_free(struct mailprivacy * privacy, mailmessage * msg_info, char * msg) { if (msg == NULL) return; if (msg_is_modified(privacy, msg_info)) { if (result_is_mmapstr(privacy, msg)) { unregister_result_mmapstr(privacy, msg); return; } } mailmessage_fetch_result_free(msg_info, msg); }
static void imap_fetch_result_free(mailmessage * msg_info, char * msg) { mailmessage_fetch_result_free(get_ancestor(msg_info), msg); }