]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
Moved mail_index_seq_array_*() to mail-index-util.c and added its own .h file.
authorTimo Sirainen <tss@iki.fi>
Mon, 13 Jul 2009 17:13:03 +0000 (13:13 -0400)
committerTimo Sirainen <tss@iki.fi>
Mon, 13 Jul 2009 17:13:03 +0000 (13:13 -0400)
--HG--
branch : HEAD

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

index 476e895f5514e205aac00516205fd081323b8dd8..156924f60f3a1be5d5d70a3e82e65a5fddcb5bdf 100644 (file)
@@ -51,6 +51,7 @@ headers = \
         mail-index-strmap.h \
        mail-index-sync-private.h \
        mail-index-transaction-private.h \
+       mail-index-util.h \
        mail-index-view-private.h \
         mail-transaction-log.h \
        mail-transaction-log-private.h \
index 8395db0829653ecb7c1806943dc0e97ef0f528be..9904523eac724193dfe065eb963f4c08bf40d353 100644 (file)
@@ -3,6 +3,7 @@
 
 #include "file-lock.h"
 #include "mail-index.h"
+#include "mail-index-util.h"
 #include "mail-index-view-private.h"
 #include "mail-index-transaction-private.h"
 
@@ -51,8 +52,6 @@ typedef int mail_index_sync_handler_t(struct mail_index_sync_map_ctx *ctx,
                                      const void *new_data, void **context);
 typedef void mail_index_sync_lost_handler_t(struct mail_index *index);
 
-ARRAY_DEFINE_TYPE(seq_array, uint32_t);
-
 #define MAIL_INDEX_HEADER_SIZE_ALIGN(size) \
        (((size) + 7) & ~7)
 
@@ -353,12 +352,4 @@ int mail_index_file_set_syscall_error(struct mail_index *index,
                                      const char *filepath,
                                      const char *function);
 
-uint32_t mail_index_uint32_to_offset(uint32_t offset);
-uint32_t mail_index_offset_to_uint32(uint32_t offset);
-
-#define MAIL_INDEX_PACK_MAX_SIZE ((sizeof(uint32_t) * 8 + 7) / 7)
-void mail_index_pack_num(uint8_t **p, uint32_t num);
-int mail_index_unpack_num(const uint8_t **p, const uint8_t *end,
-                         uint32_t *num_r);
-
 #endif
index 64cd8f87690493f643346fe42e3e40daddc61b55..b7b0af6ab483b1e6c32662a25ffe9275fa75be64 100644 (file)
@@ -111,12 +111,6 @@ mail_index_transaction_get_flag_update_pos(struct mail_index_transaction *t,
                                           unsigned int right_idx,
                                           uint32_t seq);
 
-bool mail_index_seq_array_lookup(const ARRAY_TYPE(seq_array) *array,
-                                uint32_t seq, unsigned int *idx_r);
-bool mail_index_seq_array_add(ARRAY_TYPE(seq_array) *array, uint32_t seq,
-                             const void *record, size_t record_size,
-                             void *old_record);
-
 int mail_index_transaction_finish(struct mail_index_transaction *t);
 void mail_index_transaction_export(struct mail_index_transaction *t,
                                   struct mail_transaction_log_append_ctx *append_ctx);
index 72d8d311b2edb6c3b851bfe1f93cd1cfec168d65..6542a4eea3b409b1070ac0f81af695b5ddda98b6 100644 (file)
@@ -143,61 +143,6 @@ void mail_index_transaction_unref(struct mail_index_transaction **_t)
                mail_index_transaction_free(t);
 }
 
-static int mail_index_seq_record_cmp(const void *key, const void *data)
-{
-       const uint32_t *seq_p = key;
-       const uint32_t *data_seq = data;
-
-       return *seq_p - *data_seq;
-}
-
-bool mail_index_seq_array_lookup(const ARRAY_TYPE(seq_array) *array,
-                                uint32_t seq, unsigned int *idx_r)
-{
-       const void *base;
-       unsigned int count;
-
-       base = array_get(array, &count);
-       return bsearch_insert_pos(&seq, base, count, array->arr.element_size,
-                                 mail_index_seq_record_cmp, idx_r);
-}
-
-bool mail_index_seq_array_add(ARRAY_TYPE(seq_array) *array, uint32_t seq,
-                             const void *record, size_t record_size,
-                             void *old_record)
-{
-       void *p;
-       unsigned int idx, aligned_record_size;
-
-       /* records need to be 32bit aligned */
-       aligned_record_size = (record_size + 3) & ~3;
-
-       if (!array_is_created(array)) {
-               array_create(array, default_pool,
-                            sizeof(seq) + aligned_record_size,
-                            1024 / (sizeof(seq) + aligned_record_size));
-       }
-       i_assert(array->arr.element_size == sizeof(seq) + aligned_record_size);
-
-       if (mail_index_seq_array_lookup(array, seq, &idx)) {
-               /* already there, update */
-               p = array_idx_modifiable(array, idx);
-               if (old_record != NULL) {
-                       /* save the old record before overwriting it */
-                       memcpy(old_record, PTR_OFFSET(p, sizeof(seq)),
-                              record_size);
-               }
-               memcpy(PTR_OFFSET(p, sizeof(seq)), record, record_size);
-               return TRUE;
-       } else {
-               /* insert */
-                p = array_insert_space(array, idx);
-               memcpy(p, &seq, sizeof(seq));
-               memcpy(PTR_OFFSET(p, sizeof(seq)), record, record_size);
-               return FALSE;
-       }
-}
-
 uint32_t mail_index_transaction_get_next_uid(struct mail_index_transaction *t)
 {
        const struct mail_index_header *head_hdr, *hdr;
index 2dcaa6b57ac136d44d3f46ddb089c4aa1499d738..6a61fef412dcc6fa598f9a165d9ae1403675798b 100644 (file)
@@ -1,6 +1,8 @@
 /* Copyright (c) 2003-2009 Dovecot authors, see the included COPYING file */
 
 #include "lib.h"
+#include "array.h"
+#include "bsearch-insert-pos.h"
 #include "mail-index-private.h"
 
 #if WORDS_BIGENDIAN
@@ -100,3 +102,58 @@ int mail_index_unpack_num(const uint8_t **p, const uint8_t *end,
        *num_r = value;
        return 0;
 }
+
+static int mail_index_seq_record_cmp(const void *key, const void *data)
+{
+       const uint32_t *seq_p = key;
+       const uint32_t *data_seq = data;
+
+       return *seq_p - *data_seq;
+}
+
+bool mail_index_seq_array_lookup(const ARRAY_TYPE(seq_array) *array,
+                                uint32_t seq, unsigned int *idx_r)
+{
+       const void *base;
+       unsigned int count;
+
+       base = array_get(array, &count);
+       return bsearch_insert_pos(&seq, base, count, array->arr.element_size,
+                                 mail_index_seq_record_cmp, idx_r);
+}
+
+bool mail_index_seq_array_add(ARRAY_TYPE(seq_array) *array, uint32_t seq,
+                             const void *record, size_t record_size,
+                             void *old_record)
+{
+       void *p;
+       unsigned int idx, aligned_record_size;
+
+       /* records need to be 32bit aligned */
+       aligned_record_size = (record_size + 3) & ~3;
+
+       if (!array_is_created(array)) {
+               array_create(array, default_pool,
+                            sizeof(seq) + aligned_record_size,
+                            1024 / (sizeof(seq) + aligned_record_size));
+       }
+       i_assert(array->arr.element_size == sizeof(seq) + aligned_record_size);
+
+       if (mail_index_seq_array_lookup(array, seq, &idx)) {
+               /* already there, update */
+               p = array_idx_modifiable(array, idx);
+               if (old_record != NULL) {
+                       /* save the old record before overwriting it */
+                       memcpy(old_record, PTR_OFFSET(p, sizeof(seq)),
+                              record_size);
+               }
+               memcpy(PTR_OFFSET(p, sizeof(seq)), record, record_size);
+               return TRUE;
+       } else {
+               /* insert */
+                p = array_insert_space(array, idx);
+               memcpy(p, &seq, sizeof(seq));
+               memcpy(PTR_OFFSET(p, sizeof(seq)), record, record_size);
+               return FALSE;
+       }
+}
diff --git a/src/lib-index/mail-index-util.h b/src/lib-index/mail-index-util.h
new file mode 100644 (file)
index 0000000..5b4b0c9
--- /dev/null
@@ -0,0 +1,20 @@
+#ifndef MAIL_INDEX_UTIL_H
+#define MAIL_INDEX_UTIL_H
+
+ARRAY_DEFINE_TYPE(seq_array, uint32_t);
+
+uint32_t mail_index_uint32_to_offset(uint32_t offset);
+uint32_t mail_index_offset_to_uint32(uint32_t offset);
+
+#define MAIL_INDEX_PACK_MAX_SIZE ((sizeof(uint32_t) * 8 + 7) / 7)
+void mail_index_pack_num(uint8_t **p, uint32_t num);
+int mail_index_unpack_num(const uint8_t **p, const uint8_t *end,
+                         uint32_t *num_r);
+
+bool mail_index_seq_array_lookup(const ARRAY_TYPE(seq_array) *array,
+                                uint32_t seq, unsigned int *idx_r);
+bool mail_index_seq_array_add(ARRAY_TYPE(seq_array) *array, uint32_t seq,
+                             const void *record, size_t record_size,
+                             void *old_record);
+
+#endif