int mailimap_fetch_rfc822(mailimap * session, uint32_t msgid, char ** result) { int r; clist * fetch_list; struct mailimap_fetch_att * fetch_att; struct mailimap_fetch_type * fetch_type; struct mailimap_set * set; struct mailimap_msg_att * msg_att; struct mailimap_msg_att_item * item; int res; fetch_att = mailimap_fetch_att_new_rfc822(); fetch_type = mailimap_fetch_type_new_fetch_att(fetch_att); set = mailimap_set_new_single(msgid); r = mailimap_fetch(session, set, fetch_type, &fetch_list); mailimap_set_free(set); mailimap_fetch_type_free(fetch_type); if (r != MAILIMAP_NO_ERROR) { res = r; goto err; } if (clist_isempty(fetch_list)) { res = MAILIMAP_ERROR_FETCH; goto free; } msg_att = (struct mailimap_msg_att *) clist_begin(fetch_list)->data; if (clist_isempty(msg_att->att_list)) { res = MAILIMAP_ERROR_FETCH; goto free; } item = (struct mailimap_msg_att_item *) clist_begin(msg_att->att_list)->data; if (item->att_type != MAILIMAP_MSG_ATT_ITEM_STATIC) { res = MAILIMAP_ERROR_FETCH; goto free; } if (item->att_data.att_static->att_type != MAILIMAP_MSG_ATT_RFC822) { res = MAILIMAP_ERROR_FETCH; goto free; } * result = item->att_data.att_static->att_data.att_rfc822.att_content; item->att_data.att_static->att_data.att_rfc822.att_content = NULL; mailimap_fetch_list_free(fetch_list); return MAILIMAP_NO_ERROR; free: mailimap_fetch_list_free(fetch_list); err: return res; }
int clist_insert_after(clist * lst, clistiter * iter, void * data) { clistcell * c; c = (clistcell *) malloc(sizeof(clistcell)); if (!c) return -1; c->data = data; lst->count++; if (clist_isempty(lst)) { c->previous = c->next = NULL; lst->first = lst->last = c; return 0; } if (!iter) { c->previous = lst->last; c->previous->next = c; c->next = NULL; lst->last = c; return 0; } c->previous = iter; c->next = iter->next; if (c->next) c->next->previous = c; else lst->last = c; c->previous->next = c; return 0; }
int mailmime_smart_remove_part(struct mailmime * mime) { struct mailmime * parent; int res; parent = mime->mm_parent; if (parent == NULL) { res = MAILIMF_ERROR_INVAL; goto err; } switch (mime->mm_type) { case MAILMIME_MESSAGE: if (mime->mm_data.mm_message.mm_msg_mime != NULL) { res = MAILIMF_ERROR_INVAL; goto err; } mailmime_remove_part(mime); mailmime_free(mime); return MAILIMF_NO_ERROR; case MAILMIME_MULTIPLE: if (!clist_isempty(mime->mm_data.mm_multipart.mm_mp_list)) { res = MAILIMF_ERROR_INVAL; goto err; } mailmime_remove_part(mime); mailmime_free(mime); return MAILIMF_NO_ERROR; case MAILMIME_SINGLE: mailmime_remove_part(mime); mailmime_free(mime); return MAILIMF_NO_ERROR; default: return MAILIMF_ERROR_INVAL; } err: return res; }
LIBETPAN_EXPORT int mailstorage_connect(struct mailstorage * storage) { if (storage->sto_session != NULL) return MAIL_NO_ERROR; if (!clist_isempty(storage->sto_shared_folders)) return MAIL_ERROR_BAD_STATE; if (storage->sto_driver->sto_connect == NULL) return MAIL_ERROR_NOT_IMPLEMENTED; return storage->sto_driver->sto_connect(storage); }