Mercurial > dovecot > original-hg > dovecot-1.2
view src/lib-storage/index/index-expunge.c @ 52:d5f0f634b86e HEAD
More overflow fixes.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Wed, 28 Aug 2002 00:36:06 +0300 |
parents | 3b1985cbc908 |
children | 524e78f870a2 |
line wrap: on
line source
/* Copyright (C) 2002 Timo Sirainen */ #include "lib.h" #include "index-storage.h" MailIndexRecord *index_expunge_seek_first(IndexMailbox *ibox, unsigned int *seq) { MailIndexHeader *hdr; MailIndexRecord *rec; hdr = ibox->index->get_header(ibox->index); if (hdr->deleted_messages_count == 0) return NULL; /* find mails with DELETED flag and expunge them */ if (hdr->first_deleted_uid_lowwater > 1) { rec = hdr->first_deleted_uid_lowwater >= hdr->next_uid ? NULL : ibox->index->lookup_uid_range(ibox->index, hdr->first_deleted_uid_lowwater, hdr->next_uid-1); if (rec == NULL) { i_warning("index header's deleted_messages_count or " "first_deleted_uid_lowwater is invalid."); INDEX_MARK_CORRUPTED(ibox->index); return NULL; } else { *seq = ibox->index->get_sequence(ibox->index, rec); } } else { rec = ibox->index->lookup(ibox->index, 1); *seq = 1; } return rec; } int index_storage_expunge(Mailbox *box) { IndexMailbox *ibox = (IndexMailbox *) box; int failed; if (box->readonly) { mail_storage_set_error(box->storage, "Mailbox is read-only"); return FALSE; } if (!ibox->index->set_lock(ibox->index, MAIL_LOCK_EXCLUSIVE)) return mail_storage_set_index_error(ibox); failed = !ibox->expunge_locked(ibox, NULL, NULL); if (!ibox->index->set_lock(ibox->index, MAIL_LOCK_UNLOCK) || failed) return mail_storage_set_index_error(ibox); return TRUE; }