static int body_body_to_mmapstr(char * data, size_t size, char ** result, size_t * result_len) { size_t cur_token; int res; int r; cur_token = 0; /* skip header */ /* MIME header */ while (1) { r = mailimf_ignore_field_parse(data, size, &cur_token); if (r == MAILIMF_NO_ERROR) { /* do nothing */ } else break; } r = mailimf_crlf_parse(data, size, &cur_token); if ((r != MAILIMF_NO_ERROR) && (r != MAILIMF_ERROR_PARSE)) { res = maildriver_imf_error_to_mail_error(r); goto err; } return body_to_mmapstr(data + cur_token, size - cur_token, result, result_len); err: return res; }
int mailmessage_generic_fetch_section_body(mailmessage * msg_info, struct mailmime * mime, char ** result, size_t * result_len) { MMAPString * mmapstr; int r; int res; size_t cur_token; cur_token = 0; if (mime->mm_type == MAILMIME_MESSAGE) { /* skip header */ while (1) { r = mailimf_ignore_field_parse(mime->mm_body->dt_data.dt_text.dt_data, mime->mm_body->dt_data.dt_text.dt_length, &cur_token); if (r == MAILIMF_NO_ERROR) { /* do nothing */ } else break; } r = mailimf_crlf_parse(mime->mm_body->dt_data.dt_text.dt_data, mime->mm_body->dt_data.dt_text.dt_length, &cur_token); if ((r != MAILIMF_NO_ERROR) && (r != MAILIMF_ERROR_PARSE)) { res = maildriver_imf_error_to_mail_error(r); goto err; } } mmapstr = mmap_string_new_len(mime->mm_body->dt_data.dt_text.dt_data + cur_token, mime->mm_body->dt_data.dt_text.dt_length - cur_token); if (mmapstr == NULL) { res = MAIL_ERROR_MEMORY; goto err; } r = mmap_string_ref(mmapstr); if (r < 0) { res = MAIL_ERROR_MEMORY; goto free_mmap; } * result = mmapstr->str; * result_len = mmapstr->len; return MAIL_NO_ERROR; free_mmap: mmap_string_free(mmapstr); err: return res; }
int mailmessage_generic_fetch_header(mailmessage * msg_info, char ** result, size_t * result_len) { int r; char * message; size_t cur_token; size_t length; MMAPString * mmapstr; char * headers; int res; struct generic_message_t * msg; msg = msg_info->msg_data; r = mailmessage_generic_prefetch(msg_info); if (r != MAIL_NO_ERROR) { res = r; goto err; } message = msg->msg_message; length = msg->msg_length; cur_token = 0; while (1) { r = mailimf_ignore_field_parse(message, length, &cur_token); if (r == MAILIMF_NO_ERROR) { /* do nothing */ } else break; } mailimf_crlf_parse(message, length, &cur_token); mmapstr = mmap_string_new_len(message, cur_token); if (mmapstr == NULL) { res = MAIL_ERROR_MEMORY; goto err; } r = mmap_string_ref(mmapstr); if (r < 0) { res = MAIL_ERROR_MEMORY; goto free_mmap; } headers = mmapstr->str; * result = headers; * result_len = cur_token; return MAIL_NO_ERROR; free_mmap: mmap_string_free(mmapstr); err: return res; }
static int body_to_mmapstr(char * data, size_t size, char ** result, size_t * result_len) { MMAPString * mmapstr; size_t cur_token; int res; int r; cur_token = 0; /* skip header */ while (1) { r = mailimf_ignore_field_parse(data, size, &cur_token); if (r == MAILIMF_NO_ERROR) { /* do nothing */ } else break; } r = mailimf_crlf_parse(data, size, &cur_token); if ((r != MAILIMF_NO_ERROR) && (r != MAILIMF_ERROR_PARSE)) { res = maildriver_imf_error_to_mail_error(r); goto err; } mmapstr = mmap_string_new_len(data + cur_token, size - cur_token); if (mmapstr == NULL) { res = MAIL_ERROR_MEMORY; goto err; } r = mmap_string_ref(mmapstr); if (r != 0) { mmap_string_free(mmapstr); res = MAIL_ERROR_MEMORY; goto err; } * result = mmapstr->str; * result_len = mmapstr->len; return MAIL_NO_ERROR; err: return res; }