]> git.ipfire.org Git - thirdparty/dovecot/core.git/commitdiff
global: Avoid using buffer_get_data()
authorTimo Sirainen <timo.sirainen@dovecot.fi>
Sat, 30 Apr 2016 10:59:32 +0000 (13:59 +0300)
committerGitLab <gitlab@git.dovecot.net>
Tue, 3 May 2016 16:49:03 +0000 (19:49 +0300)
Especially buffer_get_data(buf, NULL) generates worse code than just
using buf->data directly.

src/lib-imap/imap-base-subject.c
src/lib-index/mail-transaction-log-view.c
src/lib-mail/istream-header-filter.c
src/lib-mail/message-header-parser.c
src/lib-storage/index/index-mail-headers.c
src/lib-storage/mail-search.c
src/lib/array.c
src/lib/str.c

index 56f5a10a6ce3df577675711763b05f4a9bac91d6..272c1686d2b6fb4af395ca39e53805cc1f542035 100644 (file)
@@ -113,7 +113,7 @@ static bool remove_subj_leader(buffer_t *buf, size_t *start_pos,
 
           BLOBCHAR        = %x01-5a / %x5c / %x5e-7f
                           ; any CHAR except '[' and ']' */
-       orig_data = buffer_get_data(buf, NULL);
+       orig_data = buf->data;
        orig_data += *start_pos;
        data = orig_data;
 
@@ -157,7 +157,7 @@ static bool remove_blob_when_nonempty(buffer_t *buf, size_t *start_pos)
 {
        const char *data, *orig_data;
 
-       orig_data = buffer_get_data(buf, NULL);
+       orig_data = buf->data;
        orig_data += *start_pos;
        data = orig_data;
        if (*data == '[' && remove_blob(&data) && *data != '\0') {
@@ -171,13 +171,12 @@ static bool remove_blob_when_nonempty(buffer_t *buf, size_t *start_pos)
 static bool remove_subj_fwd_hdr(buffer_t *buf, size_t *start_pos,
                                bool *is_reply_or_forward_r)
 {
-       const char *data;
-       size_t size;
+       const char *data = buf->data;
+       size_t size = buf->used;
 
        /* subj-fwd        = subj-fwd-hdr subject subj-fwd-trl
           subj-fwd-hdr    = "[fwd:"
           subj-fwd-trl    = "]" */
-       data = buffer_get_data(buf, &size);
 
        if (strncmp(data + *start_pos, "[FWD:", 5) != 0)
                return FALSE;
index da05361a6a24e90d080c67caed2a55a88ef0d106..95b2b106ac2a2ee526df1250087806d103ec33f7 100644 (file)
@@ -729,8 +729,8 @@ log_view_get_next(struct mail_transaction_log_view *view,
 
        file = view->cur;
 
-       data = buffer_get_data(file->buffer, &file_size);
-       file_size += file->buffer_offset;
+       data = file->buffer->data;
+       file_size = file->buffer->used + file->buffer_offset;
 
        if (view->cur_offset + sizeof(*hdr) > file_size) {
                mail_transaction_log_file_set_corrupted(file,
index d772f6de86fdbdd294d6b84ac01d467461444f0e..6f87db95008d9f75839e91b7e476a6721164d8fa 100644 (file)
@@ -94,9 +94,8 @@ read_mixed(struct header_filter_istream *mstream, size_t body_highwater_size)
                                if (mstream->crlf)
                                        buffer_append_c(mstream->hdr_buf, '\r');
                                buffer_append_c(mstream->hdr_buf, '\n');
-                               mstream->istream.buffer =
-                                       buffer_get_data(mstream->hdr_buf,
-                                                       &mstream->istream.pos);
+                               mstream->istream.buffer = mstream->hdr_buf->data;
+                               mstream->istream.pos = mstream->hdr_buf->used;
                                return mstream->hdr_buf->used - pos;
                        }
                        return ret;
index 449667d750f7cbb896967e06ed464ad7aedec0bd..3a0e02038064baf644250cd5c775628cb8e5308a 100644 (file)
@@ -350,8 +350,8 @@ int message_parse_header_next(struct message_header_parser_ctx *ctx,
                        buffer_append(ctx->value_buf,
                                      line->value, line->value_len);
                }
-               line->full_value = buffer_get_data(ctx->value_buf,
-                                                  &line->full_value_len);
+               line->full_value = ctx->value_buf->data;
+               line->full_value_len = ctx->value_buf->used;
        } else {
                /* we didn't want full_value, and this is a continued line. */
                line->full_value = NULL;
index 5636e1840631c6cada89570683be8b187fff3c57..3a9c70faa65527c7f6ff74c5656b6c4db9890497 100644 (file)
@@ -35,10 +35,9 @@ static void index_mail_parse_header_finish(struct index_mail *mail)
 {
        struct mail *_mail = &mail->mail.mail;
        const struct index_mail_line *lines;
-       const unsigned char *header, *data;
+       const unsigned char *header;
        const uint8_t *match;
        buffer_t *buf;
-       size_t data_size;
        unsigned int i, j, count, match_idx, match_count;
        bool noncontiguous;
 
@@ -48,7 +47,7 @@ static void index_mail_parse_header_finish(struct index_mail *mail)
 
        lines = array_get(&mail->header_lines, &count);
        match = array_get(&mail->header_match, &match_count);
-       header = buffer_get_data(mail->header_data, NULL);
+       header = mail->header_data->data;
        buf = buffer_create_dynamic(pool_datastack_create(), 256);
 
        /* go through all the header lines we found */
@@ -118,9 +117,8 @@ static void index_mail_parse_header_finish(struct index_mail *mail)
                                      lines[j-1].end_pos - lines[i].start_pos);
                }
 
-               data = buffer_get_data(buf, &data_size);
                index_mail_cache_add_idx(mail, lines[i].field_idx,
-                                        data, data_size);
+                                        buf->data, buf->used);
        }
 
        for (; match_idx < match_count; match_idx++) {
@@ -523,10 +521,9 @@ int index_mail_headers_get_envelope(struct index_mail *mail)
 
 static size_t get_header_size(buffer_t *buffer, size_t pos)
 {
-       const unsigned char *data;
-       size_t i, size;
+       const unsigned char *data = buffer->data;
+       size_t i, size = buffer->used;
 
-       data = buffer_get_data(buffer, &size);
        i_assert(pos <= size);
 
        for (i = pos; i < size; i++) {
@@ -587,7 +584,7 @@ index_mail_get_parsed_header(struct index_mail *mail, unsigned int field_idx)
        first_line_idx = *line_idx - 1;
 
        p_array_init(&header_values, mail->mail.data_pool, 4);
-       header = buffer_get_data(mail->header_data, NULL);
+       header = mail->header_data->data;
 
        lines = array_get(&mail->header_lines, &lines_count);
        for (i = first_line_idx; i < lines_count; i++) {
index 0deaf397e511f063287d1dee219fa78e4a7d5197..deba3f54f233627845d31d73538f8cc954e6937d 100644 (file)
@@ -518,7 +518,7 @@ mail_search_args_analyze(struct mail_search_arg *args,
                return NULL;
 
        buffer_append(headers, &null, sizeof(const char *));
-       return buffer_get_data(headers, NULL);
+       return headers->data;
 }
 
 static bool
index 1c3fe0ec0ee4ead8fd5134d4a82e79025b247607..fa0959c6e5c9b5856d2af4514268127648060426 100644 (file)
@@ -143,7 +143,7 @@ void *array_bsearch_i(struct array *array, const void *key,
 const void *array_lsearch_i(const struct array *array, const void *key,
                            int (*cmp)(const void *, const void *))
 {
-       const void * const data = buffer_get_data(array->buffer, NULL);
+       const void * const data = array->buffer->data;
        const unsigned int s = array->element_size;
        unsigned int idx;
 
index ba837d9c3b0e3b30f615fe1f9e3d182303229851..0b54a0252ba5ba5e19dd8673db0c36d17e215e9b 100644 (file)
@@ -64,12 +64,12 @@ char *str_free_without_data(string_t **str)
 const char *str_c(string_t *str)
 {
        str_add_nul(str);
-       return buffer_get_data(str, NULL);
+       return str->data;
 }
 
 const unsigned char *str_data(const string_t *str)
 {
-       return buffer_get_data(str, NULL);
+       return str->data;
 }
 
 char *str_c_modifiable(string_t *str)
@@ -119,11 +119,7 @@ void str_append_c(string_t *str, unsigned char chr)
 
 void str_append_str(string_t *dest, const string_t *src)
 {
-       const char *cstr;
-       size_t len;
-
-       cstr = buffer_get_data(src, &len);
-       buffer_append(dest, cstr, len);
+       buffer_append(dest, src->data, src->used);
 }
 
 void str_printfa(string_t *str, const char *fmt, ...)