Mercurial > dovecot > core-2.2
changeset 9612:2cab7f501986 HEAD
Moved mail_index_seq_array_*() to mail-index-util.c and added its own .h file.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 13 Jul 2009 13:13:03 -0400 |
parents | 546adc9dd14b |
children | ed9b4bc28913 |
files | 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 |
diffstat | 6 files changed, 79 insertions(+), 71 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/Makefile.am Mon Jul 13 13:04:24 2009 -0400 +++ b/src/lib-index/Makefile.am Mon Jul 13 13:13:03 2009 -0400 @@ -51,6 +51,7 @@ 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 \
--- a/src/lib-index/mail-index-private.h Mon Jul 13 13:04:24 2009 -0400 +++ b/src/lib-index/mail-index-private.h Mon Jul 13 13:13:03 2009 -0400 @@ -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 @@ 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 @@ 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
--- a/src/lib-index/mail-index-transaction-private.h Mon Jul 13 13:04:24 2009 -0400 +++ b/src/lib-index/mail-index-transaction-private.h Mon Jul 13 13:13:03 2009 -0400 @@ -111,12 +111,6 @@ 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);
--- a/src/lib-index/mail-index-transaction.c Mon Jul 13 13:04:24 2009 -0400 +++ b/src/lib-index/mail-index-transaction.c Mon Jul 13 13:13:03 2009 -0400 @@ -143,61 +143,6 @@ 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;
--- a/src/lib-index/mail-index-util.c Mon Jul 13 13:04:24 2009 -0400 +++ b/src/lib-index/mail-index-util.c Mon Jul 13 13:13:03 2009 -0400 @@ -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 @@ *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; + } +}
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/src/lib-index/mail-index-util.h Mon Jul 13 13:13:03 2009 -0400 @@ -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