struct mailmime_discrete_type * mailmime_discrete_type_dup(struct mailmime_discrete_type * discrete_type) { struct mailmime_discrete_type * dup_discrete; char * extension; extension = NULL; if (discrete_type->dt_extension != NULL) { extension = strdup(discrete_type->dt_extension); if (extension == NULL) goto err; } dup_discrete = mailmime_discrete_type_new(discrete_type->dt_type, extension); if (dup_discrete == NULL) goto free_extension; return dup_discrete; free_extension: if (extension != NULL) free(extension); err: return NULL; }
struct mailmime_content * mailmime_get_content_text(void) { clist * list; struct mailmime_discrete_type * discrete_type; struct mailmime_type * mime_type; struct mailmime_content * content; char * subtype; discrete_type = mailmime_discrete_type_new(MAILMIME_DISCRETE_TYPE_TEXT, NULL); if (discrete_type == NULL) goto err; mime_type = mailmime_type_new(MAILMIME_TYPE_DISCRETE_TYPE, discrete_type, NULL); if (mime_type == NULL) goto free_discrete; discrete_type = NULL; list = clist_new(); if (list == NULL) goto free_type; subtype = strdup("plain"); if (subtype == NULL) goto free_list; content = mailmime_content_new(mime_type, subtype, list); if (content == NULL) goto free_subtype; return content; free_subtype: free(subtype); free_list: clist_free(list); free_type: mailmime_type_free(mime_type); free_discrete: if (discrete_type != NULL) mailmime_discrete_type_free(discrete_type); err: return NULL; }
static int mailmime_discrete_type_parse(const char * message, size_t length, size_t * indx, struct mailmime_discrete_type ** result) { char * extension; int type; struct mailmime_discrete_type * discrete_type; size_t cur_token; int r; int res; cur_token = * indx; extension = NULL; type = MAILMIME_DISCRETE_TYPE_ERROR; /* XXX - removes a gcc warning */ r = mailimf_token_case_insensitive_parse(message, length, &cur_token, "text"); if (r == MAILIMF_NO_ERROR) type = MAILMIME_DISCRETE_TYPE_TEXT; if (r == MAILIMF_ERROR_PARSE) { r = mailimf_token_case_insensitive_parse(message, length, &cur_token, "image"); if (r == MAILIMF_NO_ERROR) type = MAILMIME_DISCRETE_TYPE_IMAGE; } if (r == MAILIMF_ERROR_PARSE) { r = mailimf_token_case_insensitive_parse(message, length, &cur_token, "audio"); if (r == MAILIMF_NO_ERROR) type = MAILMIME_DISCRETE_TYPE_AUDIO; } if (r == MAILIMF_ERROR_PARSE) { r = mailimf_token_case_insensitive_parse(message, length, &cur_token, "video"); if (r == MAILIMF_NO_ERROR) type = MAILMIME_DISCRETE_TYPE_VIDEO; } if (r == MAILIMF_ERROR_PARSE) { r = mailimf_token_case_insensitive_parse(message, length, &cur_token, "application"); if (r == MAILIMF_NO_ERROR) type = MAILMIME_DISCRETE_TYPE_APPLICATION; } if (r == MAILIMF_ERROR_PARSE) { r = mailmime_extension_token_parse(message, length, &cur_token, &extension); if (r == MAILIMF_NO_ERROR) type = MAILMIME_DISCRETE_TYPE_EXTENSION; } if (r != MAILIMF_NO_ERROR) { res = r; goto err; } discrete_type = mailmime_discrete_type_new(type, extension); if (discrete_type == NULL) { res = MAILIMF_ERROR_MEMORY; goto free; } * result = discrete_type; * indx = cur_token; return MAILIMF_NO_ERROR; free: mailmime_extension_token_free(extension); err: return res; }