]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Transaction log view code cleanups.
authorTimo Sirainen <tss@iki.fi>
Sat, 9 May 2009 16:32:04 +0000 (12:32 -0400)
committerTimo Sirainen <tss@iki.fi>
Sat, 9 May 2009 16:32:04 +0000 (12:32 -0400)
--HG--
branch : HEAD

src/lib-index/Makefile.am
src/lib-index/mail-transaction-log-view-private.h [new file with mode: 0644]
src/lib-index/mail-transaction-log-view.c

index d0119f96b166b0939a905c6565cd7a50a2995289..84bf35d4ea5a74cc27df7c531761f7bc440a06cc 100644 (file)
@@ -47,6 +47,7 @@ headers = \
        mail-index-view-private.h \
         mail-transaction-log.h \
        mail-transaction-log-private.h \
+       mail-transaction-log-view-private.h \
         mailbox-list-index.h \
         mailbox-list-index-private.h
 
diff --git a/src/lib-index/mail-transaction-log-view-private.h b/src/lib-index/mail-transaction-log-view-private.h
new file mode 100644 (file)
index 0000000..86a6cef
--- /dev/null
@@ -0,0 +1,33 @@
+#ifndef MAIL_TRANSACTION_LOG_VIEW_PRIVATE_H
+#define MAIL_TRANSACTION_LOG_VIEW_PRIVATE_H
+
+#include "mail-transaction-log-private.h"
+
+struct mail_transaction_log_view {
+       struct mail_transaction_log *log;
+        struct mail_transaction_log_view *next;
+
+       uint32_t min_file_seq, max_file_seq;
+       uoff_t min_file_offset, max_file_offset;
+
+       struct mail_transaction_header tmp_hdr;
+
+       /* a list of log files we've referenced. we have to keep this list
+          explicitly because more files may be added into the linked list
+          at any time. */
+       ARRAY_DEFINE(file_refs, struct mail_transaction_log_file *);
+        struct mail_transaction_log_file *cur, *head, *tail;
+       uoff_t cur_offset;
+
+       uint64_t prev_modseq;
+       uint32_t prev_file_seq;
+       uoff_t prev_file_offset;
+
+       struct mail_transaction_log_file *mark_file;
+       uoff_t mark_offset, mark_next_offset;
+       uint64_t mark_modseq;
+
+       unsigned int broken:1;
+};
+
+#endif
index 735a11bddac7f19866b825770eac7746a8ecec80..f3468faf66b80a73f677c08d6fe4b50596fbb72e 100644 (file)
@@ -3,34 +3,7 @@
 #include "lib.h"
 #include "array.h"
 #include "mail-index-private.h"
-#include "mail-transaction-log-private.h"
-
-struct mail_transaction_log_view {
-       struct mail_transaction_log *log;
-        struct mail_transaction_log_view *next;
-
-       uint32_t min_file_seq, max_file_seq;
-       uoff_t min_file_offset, max_file_offset;
-
-       struct mail_transaction_header tmp_hdr;
-
-       /* a list of log files we've referenced. we have to keep this list
-          explicitly because more files may be added into the linked list
-          at any time. */
-       ARRAY_DEFINE(file_refs, struct mail_transaction_log_file *);
-        struct mail_transaction_log_file *cur, *head, *tail;
-       uoff_t cur_offset;
-
-       uint64_t prev_modseq;
-       uint32_t prev_file_seq;
-       uoff_t prev_file_offset;
-
-       struct mail_transaction_log_file *mark_file;
-       uoff_t mark_offset, mark_next_offset;
-       uint64_t mark_modseq;
-
-       unsigned int broken:1;
-};
+#include "mail-transaction-log-view-private.h"
 
 struct mail_transaction_log_view *
 mail_transaction_log_view_open(struct mail_transaction_log *log)
@@ -98,7 +71,7 @@ int mail_transaction_log_view_set(struct mail_transaction_log_view *view,
                                  uint32_t max_file_seq, uoff_t max_file_offset,
                                  bool *reset_r)
 {
-       struct mail_transaction_log_file *file, *const *files;
+       struct mail_transaction_log_file *file, *const *files, *tail;
        uoff_t start_offset, end_offset;
        unsigned int i;
        uint32_t seq;
@@ -114,15 +87,16 @@ int mail_transaction_log_view_set(struct mail_transaction_log_view *view,
                return -1;
        }
 
+       tail = view->log->files;
        if (min_file_seq == 0) {
                /* index file doesn't exist yet. this transaction log should
                   start from the beginning */
-               if (view->log->files->hdr.prev_file_seq != 0) {
+               if (tail->hdr.prev_file_seq != 0) {
                        /* but it doesn't */
                        return 0;
                }
 
-               min_file_seq = view->log->files->hdr.file_seq;
+               min_file_seq = tail->hdr.file_seq;
                min_file_offset = 0;
 
                if (max_file_seq == 0) {
@@ -131,10 +105,10 @@ int mail_transaction_log_view_set(struct mail_transaction_log_view *view,
                }
        } 
 
-       if (min_file_seq == view->log->files->hdr.prev_file_seq &&
-           min_file_offset == view->log->files->hdr.prev_file_offset) {
+       if (min_file_seq == tail->hdr.prev_file_seq &&
+           min_file_offset == tail->hdr.prev_file_offset) {
                /* we can skip this */
-               min_file_seq = view->log->files->hdr.file_seq;
+               min_file_seq = tail->hdr.file_seq;
                min_file_offset = 0;
 
                if (min_file_seq > max_file_seq) {
@@ -153,14 +127,12 @@ int mail_transaction_log_view_set(struct mail_transaction_log_view *view,
                return -1;
        }
 
-       if (min_file_offset > 0 &&
-           min_file_offset < view->log->files->hdr.hdr_size) {
+       if (min_file_offset > 0 && min_file_offset < tail->hdr.hdr_size) {
                /* log file offset is probably corrupted in the index file. */
                mail_transaction_log_view_set_corrupted(view,
                        "file_seq=%u, min_file_offset (%"PRIuUOFF_T
                        ") < hdr_size (%u)",
-                       min_file_seq, min_file_offset,
-                       view->log->files->hdr.hdr_size);
+                       min_file_seq, min_file_offset, tail->hdr.hdr_size);
                return -1;
        }