Mercurial > dovecot > core-2.2
changeset 9623:3da42dafa798 HEAD
buffer_create_[const_]data() API change: Take buffer_t as parameter instead of allocating it.
author | Timo Sirainen <tss@iki.fi> |
---|---|
date | Mon, 13 Jul 2009 21:11:05 -0400 |
parents | cae78e734cdb |
children | 2558ba736207 |
files | src/lib-index/mail-index-map.c src/lib-index/mail-index-modseq.c src/lib-index/mail-index-transaction-export.c src/lib-index/mail-transaction-log-file.c src/lib-index/mail-transaction-log-private.h src/lib-index/mail-transaction-log-view.c src/lib-otp/otp-parse.c src/lib-storage/index/index-mail.c src/lib-storage/index/maildir/maildir-save.c src/lib/buffer.c src/lib/buffer.h src/lib/str.c |
diffstat | 12 files changed, 67 insertions(+), 80 deletions(-) [+] |
line wrap: on
line diff
--- a/src/lib-index/mail-index-map.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-index/mail-index-map.c Mon Jul 13 21:11:05 2009 -0400 @@ -12,7 +12,7 @@ { #define EXTENSION_NAME_APPROX_LEN 20 #define EXT_GLOBAL_ALLOC_SIZE \ - ((sizeof(map->extensions) + BUFFER_APPROX_SIZE) * 2) + ((sizeof(map->extensions) + sizeof(buffer_t)) * 2) #define EXT_PER_ALLOC_SIZE \ (EXTENSION_NAME_APPROX_LEN + \ sizeof(struct mail_index_ext) + sizeof(uint32_t))
--- a/src/lib-index/mail-index-modseq.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-index/mail-index-modseq.c Mon Jul 13 21:11:05 2009 -0400 @@ -300,7 +300,7 @@ { ARRAY_TYPE(seq_range) uids = ARRAY_INIT; const struct seq_range *rec; - buffer_t *uid_buf; + buffer_t uid_buf; unsigned int i, count; uint32_t seq1, seq2; @@ -319,9 +319,8 @@ return; } case MAIL_TRANSACTION_FLAG_UPDATE: { - uid_buf = buffer_create_const_data(pool_datastack_create(), - tdata, thdr->size); - array_create_from_buffer(&uids, uid_buf, + buffer_create_const_data(&uid_buf, tdata, thdr->size); + array_create_from_buffer(&uids, &uid_buf, sizeof(struct mail_transaction_flag_update)); break; } @@ -333,16 +332,15 @@ if ((seqset_offset % 4) != 0) seqset_offset += 4 - (seqset_offset % 4); - uid_buf = buffer_create_const_data(pool_datastack_create(), - CONST_PTR_OFFSET(tdata, seqset_offset), - thdr->size - seqset_offset); - array_create_from_buffer(&uids, uid_buf, sizeof(uint32_t)*2); + buffer_create_const_data(&uid_buf, + CONST_PTR_OFFSET(tdata, seqset_offset), + thdr->size - seqset_offset); + array_create_from_buffer(&uids, &uid_buf, sizeof(uint32_t)*2); break; } case MAIL_TRANSACTION_KEYWORD_RESET: - uid_buf = buffer_create_const_data(pool_datastack_create(), - tdata, thdr->size); - array_create_from_buffer(&uids, uid_buf, + buffer_create_const_data(&uid_buf, tdata, thdr->size); + array_create_from_buffer(&uids, &uid_buf, sizeof(struct mail_transaction_keyword_reset)); break; default:
--- a/src/lib-index/mail-index-transaction-export.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-index/mail-index-transaction-export.c Mon Jul 13 21:11:05 2009 -0400 @@ -171,7 +171,7 @@ uint32_t ext_id, reset_id; const struct mail_transaction_ext_reset *reset; const uint32_t *reset_ids; - buffer_t *reset_buf; + buffer_t reset_buf; if (!array_is_created(&t->ext_resizes)) { resize = NULL; @@ -208,9 +208,8 @@ } memset(&ext_reset, 0, sizeof(ext_reset)); - reset_buf = buffer_create_data(pool_datastack_create(), - &ext_reset, sizeof(ext_reset)); - buffer_set_used_size(reset_buf, sizeof(ext_reset)); + buffer_create_data(&reset_buf, &ext_reset, sizeof(ext_reset)); + buffer_set_used_size(&reset_buf, sizeof(ext_reset)); for (ext_id = 0; ext_id < ext_count; ext_id++) { if (ext_id < reset_count) @@ -233,7 +232,7 @@ if (ext_reset.new_reset_id != 0) { i_assert(ext_id < reset_id_count && ext_reset.new_reset_id == reset_ids[ext_id]); - log_append_buffer(ctx, reset_buf, + log_append_buffer(ctx, &reset_buf, MAIL_TRANSACTION_EXT_RESET); } if (ext_id < hdrs_count && hdrs[ext_id].alloc_size > 0) {
--- a/src/lib-index/mail-transaction-log-file.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-index/mail-transaction-log-file.c Mon Jul 13 21:11:05 2009 -0400 @@ -1390,9 +1390,9 @@ } } - file->buffer = buffer_create_const_data(default_pool, - file->mmap_base, - file->mmap_size); + buffer_create_const_data(&file->mmap_buffer, + file->mmap_base, file->mmap_size); + file->buffer = &file->mmap_buffer; file->buffer_offset = 0; return 0; }
--- a/src/lib-index/mail-transaction-log-private.h Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-index/mail-transaction-log-private.h Mon Jul 13 21:11:05 2009 -0400 @@ -1,6 +1,7 @@ #ifndef MAIL_TRANSACTION_LOG_VIEW_H #define MAIL_TRANSACTION_LOG_VIEW_H +#include "buffer.h" #include "file-dotlock.h" #include "mail-transaction-log.h" @@ -44,6 +45,7 @@ uoff_t last_size; struct mail_transaction_log_header hdr; + buffer_t mmap_buffer; buffer_t *buffer; uoff_t buffer_offset; void *mmap_base;
--- a/src/lib-index/mail-transaction-log-view.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-index/mail-transaction-log-view.c Mon Jul 13 21:11:05 2009 -0400 @@ -400,7 +400,7 @@ { enum mail_transaction_type rec_type; ARRAY_TYPE(seq_range) uids = ARRAY_INIT; - buffer_t *uid_buf = NULL; + buffer_t uid_buf; uint32_t rec_size; bool ret = TRUE; @@ -437,15 +437,13 @@ } break; case MAIL_TRANSACTION_EXPUNGE: - uid_buf = buffer_create_const_data(pool_datastack_create(), - data, rec_size); - array_create_from_buffer(&uids, uid_buf, + buffer_create_const_data(&uid_buf, data, rec_size); + array_create_from_buffer(&uids, &uid_buf, sizeof(struct mail_transaction_expunge)); break; case MAIL_TRANSACTION_FLAG_UPDATE: - uid_buf = buffer_create_const_data(pool_datastack_create(), - data, rec_size); - array_create_from_buffer(&uids, uid_buf, + buffer_create_const_data(&uid_buf, data, rec_size); + array_create_from_buffer(&uids, &uid_buf, sizeof(struct mail_transaction_flag_update)); break; case MAIL_TRANSACTION_KEYWORD_UPDATE: { @@ -463,16 +461,16 @@ break; } - uid_buf = buffer_create_const_data(pool_datastack_create(), - CONST_PTR_OFFSET(data, seqset_offset), - rec_size - seqset_offset); - array_create_from_buffer(&uids, uid_buf, sizeof(uint32_t)*2); + buffer_create_const_data(&uid_buf, + CONST_PTR_OFFSET(data, seqset_offset), + rec_size - seqset_offset); + array_create_from_buffer(&uids, &uid_buf, + sizeof(uint32_t)*2); break; } case MAIL_TRANSACTION_KEYWORD_RESET: - uid_buf = buffer_create_const_data(pool_datastack_create(), - data, rec_size); - array_create_from_buffer(&uids, uid_buf, + buffer_create_const_data(&uid_buf, data, rec_size); + array_create_from_buffer(&uids, &uid_buf, sizeof(struct mail_transaction_keyword_reset)); break; default: @@ -483,7 +481,7 @@ const struct seq_range *rec, *prev = NULL; unsigned int i, count = array_count(&uids); - if ((uid_buf->used % uids.arr.element_size) != 0) { + if ((uid_buf.used % uids.arr.element_size) != 0) { mail_transaction_log_file_set_corrupted(file, "Invalid record size (type=0x%x)", rec_type); ret = FALSE;
--- a/src/lib-otp/otp-parse.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-otp/otp-parse.c Mon Jul 13 21:11:05 2009 -0400 @@ -36,14 +36,14 @@ int otp_read_hex(const char *data, const char **endptr, unsigned char *hash) { string_t *str; - buffer_t *buf; + buffer_t buf; unsigned int i = 0; if (data == NULL) return -1; str = t_str_new(18); - buf = buffer_create_data(unsafe_data_stack_pool, hash, OTP_HASH_SIZE); + buffer_create_data(&buf, hash, OTP_HASH_SIZE); while (*data) { char c = *data; @@ -68,12 +68,12 @@ if (i < OTP_HASH_SIZE * 2) return -1; - return hex_to_binary(str_c(str), buf); + return hex_to_binary(str_c(str), &buf); } #define add_word() do { \ tmp = otp_lookup_word(str_c(word)); \ - buffer_append(buf, &tmp, sizeof(tmp)); \ + buffer_append(&buf, &tmp, sizeof(tmp)); \ count++; \ } while (0) @@ -83,7 +83,7 @@ unsigned int len = 0, count = 0; unsigned int parity = 0, bits[OTP_WORDS_NUMBER], tmp; string_t *word; - buffer_t *buf; + buffer_t buf; if (data == NULL) return -1; @@ -92,7 +92,7 @@ data = otp_skip_lws(data); - buf = buffer_create_data(pool_datastack_create(), bits, sizeof(bits)); + buffer_create_data(&buf, bits, sizeof(bits)); for (; *data && (count < OTP_WORDS_NUMBER); data++) { char c = *data;
--- a/src/lib-storage/index/index-mail.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-storage/index/index-mail.c Mon Jul 13 21:11:05 2009 -0400 @@ -104,21 +104,16 @@ void *data, size_t data_size) { unsigned int field_idx = mail->ibox->cache_fields[field].idx; + buffer_t buf; int ret; - T_BEGIN { - buffer_t *buf; - - buf = buffer_create_data(pool_datastack_create(), - data, data_size); - - if (index_mail_cache_lookup_field(mail, buf, field_idx) <= 0) - ret = FALSE; - else { - i_assert(buf->used == data_size); - ret = TRUE; - } - } T_END; + buffer_create_data(&buf, data, data_size); + if (index_mail_cache_lookup_field(mail, &buf, field_idx) <= 0) + ret = FALSE; + else { + i_assert(buf.used == data_size); + ret = TRUE; + } return ret; }
--- a/src/lib-storage/index/maildir/maildir-save.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib-storage/index/maildir/maildir-save.c Mon Jul 13 21:11:05 2009 -0400 @@ -51,7 +51,7 @@ struct maildir_filename *files, **files_tail, *file_last; unsigned int files_count; - buffer_t *keywords_buffer; + buffer_t keywords_buffer; ARRAY_TYPE(keyword_indexes) keywords_array; struct istream *input; @@ -124,8 +124,8 @@ ctx->newdir = p_strconcat(pool, mbox->ibox.box.path, "/new", NULL); ctx->curdir = p_strconcat(pool, mbox->ibox.box.path, "/cur", NULL); - ctx->keywords_buffer = buffer_create_const_data(pool, NULL, 0); - array_create_from_buffer(&ctx->keywords_array, ctx->keywords_buffer, + buffer_create_const_data(&ctx->keywords_buffer, NULL, 0); + array_create_from_buffer(&ctx->keywords_array, &ctx->keywords_buffer, sizeof(unsigned int)); ctx->last_save_finished = TRUE; return ctx; @@ -236,7 +236,7 @@ } i_assert(ctx->keywords_sync_ctx != NULL || mf->keywords_count == 0); - buffer_update_const_data(ctx->keywords_buffer, mf + 1, + buffer_create_const_data(&ctx->keywords_buffer, mf + 1, mf->keywords_count * sizeof(unsigned int)); *fname_r = maildir_filename_set_flags(ctx->keywords_sync_ctx, basename, mf->flags & MAIL_FLAGS_MASK,
--- a/src/lib/buffer.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib/buffer.c Mon Jul 13 21:11:05 2009 -0400 @@ -79,30 +79,26 @@ return (buffer_t *)buf; } -buffer_t *buffer_create_data(pool_t pool, void *data, size_t size) +void buffer_create_data(buffer_t *buffer, void *data, size_t size) { struct real_buffer *buf; - buf = p_new(pool, struct real_buffer, 1); - buf->pool = pool; + i_assert(sizeof(*buffer) >= sizeof(struct real_buffer)); + + buf = (struct real_buffer *)buffer; + memset(buf, 0, sizeof(*buf)); buf->alloc = size; buf->r_buffer = buf->w_buffer = data; - return (buffer_t *)buf; } -buffer_t *buffer_create_const_data(pool_t pool, const void *data, size_t size) +void buffer_create_const_data(buffer_t *buffer, const void *data, size_t size) { struct real_buffer *buf; - buf = p_new(pool, struct real_buffer, 1); - buf->pool = pool; - buffer_update_const_data((buffer_t *)buf, data, size); - return (buffer_t *)buf; -} + i_assert(sizeof(*buffer) >= sizeof(struct real_buffer)); -void buffer_update_const_data(buffer_t *_buf, const void *data, size_t size) -{ - struct real_buffer *buf = (struct real_buffer *)_buf; + buf = (struct real_buffer *)buffer; + memset(buf, 0, sizeof(*buf)); buf->used = buf->alloc = size; buf->r_buffer = data; @@ -127,7 +123,8 @@ *_buf = NULL; if (buf->alloced) p_free(buf->pool, buf->w_buffer); - p_free(buf->pool, buf); + if (buf->pool != NULL) + p_free(buf->pool, buf); } void *buffer_free_without_data(buffer_t **_buf)
--- a/src/lib/buffer.h Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib/buffer.h Mon Jul 13 21:11:05 2009 -0400 @@ -1,13 +1,10 @@ #ifndef BUFFER_H #define BUFFER_H -/* May be used in calculations of how much memory buffer_t will allocate - for itself, but this isn't necessary precise. */ -#define BUFFER_APPROX_SIZE (7 * sizeof(void *)) - struct buffer { const void *data; const size_t used; + void *priv[5]; }; /* WARNING: Be careful with functions that return pointers to data. @@ -18,10 +15,9 @@ /* Create a static sized buffer. Writes past this size will kill the program. */ buffer_t *buffer_create_static_hard(pool_t pool, size_t size); /* Create a modifiable buffer from given data. */ -buffer_t *buffer_create_data(pool_t pool, void *data, size_t size); +void buffer_create_data(buffer_t *buffer, void *data, size_t size); /* Create a non-modifiable buffer from given data. */ -buffer_t *buffer_create_const_data(pool_t pool, const void *data, size_t size); -void buffer_update_const_data(buffer_t *buffer, const void *data, size_t size); +void buffer_create_const_data(buffer_t *buffer, const void *data, size_t size); /* Creates a dynamically growing buffer. Whenever write would exceed the current size it's grown. */ buffer_t *buffer_create_dynamic(pool_t pool, size_t init_size);
--- a/src/lib/str.c Mon Jul 13 19:54:28 2009 -0400 +++ b/src/lib/str.c Mon Jul 13 21:11:05 2009 -0400 @@ -17,7 +17,9 @@ string_t *ret; i_assert(str[len] == '\0'); - ret = buffer_create_const_data(pool, str, len + 1); + + ret = p_new(pool, buffer_t, 1); + buffer_create_const_data(ret, str, len + 1); str_truncate(ret, len); return ret; }