static int MimeMultipartAlternative_create_child(MimeObject *obj) { MimeMultipart *mult = (MimeMultipart *) obj; MimeMultipartAlternative *malt = (MimeMultipartAlternative *) obj; bool displayable = MimeMultipartAlternative_display_part_p (obj, mult->hdrs); MimeMultipartAlternative_flush_children(obj, false, displayable); mult->state = MimeMultipartPartFirstLine; int32_t i = malt->pending_parts++; if (malt->pending_parts > malt->max_parts) { malt->max_parts = malt->pending_parts; malt->buffered_hdrs = (MimeHeaders **) PR_REALLOC(malt->buffered_hdrs, malt->max_parts * sizeof *malt->buffered_hdrs); if (! malt->buffered_hdrs) return MIME_OUT_OF_MEMORY; malt->part_buffers = (MimePartBufferData **) PR_REALLOC(malt->part_buffers, malt->max_parts * sizeof *malt->part_buffers); if (! malt->part_buffers) return MIME_OUT_OF_MEMORY; } malt->buffered_hdrs[i] = MimeHeaders_copy(mult->hdrs); if (!malt->buffered_hdrs[i]) return MIME_OUT_OF_MEMORY; malt->part_buffers[i] = MimePartBufferCreate(); if (!malt->part_buffers[i]) return MIME_OUT_OF_MEMORY; return 0; }
static int MimeMultipartAlternative_parse_eof (MimeObject *obj, bool abort_p) { int status = 0; if (obj->closed_p) return 0; status = ((MimeObjectClass*)&MIME_SUPERCLASS)->parse_eof(obj, abort_p); if (status < 0) return status; status = MimeMultipartAlternative_flush_children(obj, true, false); if (status < 0) return status; MimeMultipartAlternative_cleanup(obj); return status; }