mail-transaction-log-view.c revision 95a284736b8b11319a3f575ba249ba2eb7dbac1b
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen/* Copyright (C) 2003-2004 Timo Sirainen */
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen /* a list of log files we've referenced. we have to keep this list
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen explicitly because more files may be added into the linked list
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen at any time. */
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen ARRAY_DEFINE(file_refs, struct mail_transaction_log_file *);
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen struct mail_transaction_log_file *cur, *head, *tail;
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainenmail_transaction_log_view_open(struct mail_transaction_log *log)
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen view = i_new(struct mail_transaction_log_view, 1);
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen array_append(&view->file_refs, &view->head, 1);
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainenmail_transaction_log_view_unref_all(struct mail_transaction_log_view *view)
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen struct mail_transaction_log_file *const *files;
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen unsigned int i, count;
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen for (i = 0; i < count; i++)
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainenvoid mail_transaction_log_view_close(struct mail_transaction_log_view **_view)
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen struct mail_transaction_log_view *view = *_view;
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen for (p = &view->log->views; *p != NULL; p = &(*p)->next) {
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainenvoid mail_transaction_log_views_close(struct mail_transaction_log *log)
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen for (view = log->views; view != NULL; view = view->next)
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainenmail_transaction_log_view_set(struct mail_transaction_log_view *view,
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen uint32_t min_file_seq, uoff_t min_file_offset,
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen uint32_t max_file_seq, uoff_t max_file_offset,
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen struct mail_transaction_log_file *file, *first;
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen /* transaction log is closed already. this log view shouldn't
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen be used anymore. */
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen /* new index, transaction file not synced yet */
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen if (min_file_seq == view->log->files->hdr.prev_file_seq &&
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen min_file_offset == view->log->files->hdr.prev_file_offset) {
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen /* we can skip this */
8871c97974dd4e682c7b8d5cff0bbc5b024f56f2Timo Sirainen min_file_seq = view->log->files->hdr.file_seq;
if (ret <= 0)
return ret;
if (min_file_offset == 0) {
if (ret <= 0)
return ret;
if (ret <= 0) {
if (ret < 0)
if (ret <= 0)
return ret;
const char *fmt, ...)
t_push();
t_pop();
const void **data_r)
const void *data;
unsigned int record_size;
record_size = 0;
uint32_t i;
for (i = 0; i < hdr_size; ) {
const void *data;
int ret = 0;
if (ret < 0) {
if (ret == 0)