static struct mailmime * part_multiple_new(const char * type, const char * boundary_prefix) { struct mailmime_fields * mime_fields; struct mailmime_content * content; struct mailmime * mp; mime_fields = mailmime_fields_new_empty(); if (mime_fields == NULL) goto err; content = mailmime_content_new_with_str(type); if (content == NULL) goto free_fields; mp = part_new_empty(content, mime_fields, boundary_prefix, 0); if (mp == NULL) goto free_content; return mp; free_content: mailmime_content_free(content); free_fields: mailmime_fields_free(mime_fields); err: return NULL; }
struct mailmime * mailmime_multiple_new(const char * type) { struct mailmime_fields * mime_fields; struct mailmime_content * content; struct mailmime * mp; mime_fields = mailmime_fields_new_empty(); if (mime_fields == NULL) goto err; content = mailmime_content_new_with_str(type); if (content == NULL) goto free_fields; mp = mailmime_new_empty(content, mime_fields); if (mp == NULL) goto free_content; return mp; free_content: mailmime_content_free(content); free_fields: mailmime_fields_free(mime_fields); err: return NULL; }
struct mailmime_fields * mailmime_fields_new_with_data(struct mailmime_mechanism * encoding, char * id, char * description, struct mailmime_disposition * disposition, struct mailmime_language * language) { struct mailmime_field * field; struct mailmime_fields * fields; int r; fields = mailmime_fields_new_empty(); if (fields == NULL) goto err; #if 0 if (content != NULL) { field = mailmime_field_new(MAILMIME_FIELD_TYPE, content, NULL, NULL, NULL, 0, NULL, NULL); if (field == NULL) goto free; r = mailmime_fields_add(fields, field); if (r != MAILIMF_NO_ERROR) { mailmime_field_detach(field); mailmime_field_free(field); goto free; } } #endif if (encoding != NULL) { field = mailmime_field_new(MAILMIME_FIELD_TRANSFER_ENCODING, NULL, encoding, NULL, NULL, 0, NULL, NULL, NULL); if (field == NULL) goto free; r = mailmime_fields_add(fields, field); if (r != MAILIMF_NO_ERROR) { mailmime_field_detach(field); mailmime_field_free(field); goto free; } } if (id != NULL) { field = mailmime_field_new(MAILMIME_FIELD_ID, NULL, NULL, id, NULL, 0, NULL, NULL, NULL); if (field == NULL) goto free; r = mailmime_fields_add(fields, field); if (r != MAILIMF_NO_ERROR) { mailmime_field_detach(field); mailmime_field_free(field); goto free; } } if (description != NULL) { field = mailmime_field_new(MAILMIME_FIELD_DESCRIPTION, NULL, NULL, NULL, description, 0, NULL, NULL, NULL); if (field == NULL) goto free; r = mailmime_fields_add(fields, field); if (r != MAILIMF_NO_ERROR) { mailmime_field_detach(field); mailmime_field_free(field); goto free; } } if (disposition != NULL) { field = mailmime_field_new(MAILMIME_FIELD_DISPOSITION, NULL, NULL, NULL, NULL, 0, disposition, NULL, NULL); if (field == NULL) goto free; r = mailmime_fields_add(fields, field); if (r != MAILIMF_NO_ERROR) { mailmime_field_detach(field); mailmime_field_free(field); goto free; } } if (language != NULL) { field = mailmime_field_new(MAILMIME_FIELD_DISPOSITION, NULL, NULL, NULL, NULL, 0, NULL, language, NULL); if (field == NULL) goto free; r = mailmime_fields_add(fields, field); if (r != MAILIMF_NO_ERROR) { mailmime_field_detach(field); mailmime_field_free(field); goto free; } } return fields; free: clist_foreach(fields->fld_list, (clist_func) mailmime_field_detach, NULL); mailmime_fields_free(fields); err: return NULL; }