static int append_message_flags(mailsession * session, const char * message, size_t size, struct mail_flags * flags) { struct maildir * md; int r; char uid[PATH_MAX]; struct maildir_msg * md_msg; chashdatum key; chashdatum value; uint32_t md_flags; md = get_maildir_session(session); if (md == NULL) return MAIL_ERROR_BAD_STATE; r = maildir_message_add_uid(md, message, size, uid, sizeof(uid)); if (r != MAILDIR_NO_ERROR) return maildirdriver_maildir_error_to_mail_error(r); if (flags == NULL) goto exit; key.data = uid; key.len = strlen(uid); r = chash_get(md->mdir_msg_hash, &key, &value); if (r < 0) goto exit; md_msg = value.data; md_flags = maildirdriver_flags_to_maildir_flags(flags->fl_flags); r = maildir_message_change_flags(md, uid, md_flags); if (r != MAILDIR_NO_ERROR) goto exit; return MAIL_NO_ERROR; exit: return MAIL_NO_ERROR; }
static int flags_store_process(struct maildir * md, struct mail_flags_store * flags_store) { unsigned int i; if (carray_count(flags_store->fls_tab) == 0) return MAIL_NO_ERROR; for(i = 0 ; i < carray_count(flags_store->fls_tab) ; i ++) { mailmessage * msg; uint32_t md_flags; msg = carray_get(flags_store->fls_tab, i); md_flags = maildirdriver_flags_to_maildir_flags(msg->msg_flags->fl_flags); md_flags &= ~MAILDIR_FLAG_NEW; maildir_message_change_flags(md, msg->msg_uid, md_flags); } mail_flags_store_clear(flags_store); return MAIL_NO_ERROR; }