From: Timo Sirainen Date: Fri, 29 Apr 2016 12:50:06 +0000 (+0300) Subject: global: Use buffer_get_writable_size() where possible X-Git-Tag: 2.2.25.rc1~366 X-Git-Url: http://git.ipfire.org/?a=commitdiff_plain;h=86d26af6f9bd7ba50636b0c6440d7699400289f2;p=thirdparty%2Fdovecot%2Fcore.git global: Use buffer_get_writable_size() where possible With 09539f3db increasing buffer's init_size with +1 some fts-icu unit tests started failing. And in general it's better to use the writable size since that provides the true size that can be used. --- diff --git a/src/lib-fts/test-fts-icu.c b/src/lib-fts/test-fts-icu.c index 6eab62015a..f1748bd63c 100644 --- a/src/lib-fts/test-fts-icu.c +++ b/src/lib-fts/test-fts-icu.c @@ -11,18 +11,17 @@ static void test_fts_icu_utf8_to_utf16_ascii_resize(void) { - buffer_t *dest = buffer_create_dynamic(pool_datastack_create(), 5); + buffer_t *dest = buffer_create_dynamic(pool_datastack_create(), 4); test_begin("fts_icu_utf8_to_utf16 ascii resize"); - /* dynamic buffers reserve +1 for str_c()'s NUL, so 5 -> 4 */ - test_assert(buffer_get_size(dest) == 5); + test_assert(buffer_get_writable_size(dest) == 4); fts_icu_utf8_to_utf16(dest, "12"); test_assert(dest->used == 4); - test_assert(buffer_get_size(dest) == 5); + test_assert(buffer_get_writable_size(dest) == 4); fts_icu_utf8_to_utf16(dest, "123"); test_assert(dest->used == 6); - test_assert(buffer_get_size(dest) == 8); + test_assert(buffer_get_writable_size(dest) == 7); fts_icu_utf8_to_utf16(dest, "12345"); test_assert(dest->used == 10); @@ -38,7 +37,7 @@ static void test_fts_icu_utf8_to_utf16_32bit_resize(void) test_begin("fts_icu_utf8_to_utf16 32bit resize"); for (i = 2; i <= 5; i++) { dest = buffer_create_dynamic(pool_datastack_create(), i); - test_assert(buffer_get_size(dest) == i); + test_assert(buffer_get_writable_size(dest) == i); fts_icu_utf8_to_utf16(dest, "\xF0\x90\x90\x80"); /* 0x10400 */ test_assert(dest->used == 4); } @@ -69,7 +68,7 @@ static void test_fts_icu_utf16_to_utf8_resize(void) test_begin("fts_icu_utf16_to_utf8 resize"); for (i = 2; i <= 6; i++) { dest = t_str_new(i); - test_assert(buffer_get_size(dest) == i); + test_assert(buffer_get_writable_size(dest) == i); fts_icu_utf16_to_utf8(dest, &src, 1); test_assert(dest->used == 3); test_assert(strcmp(str_c(dest), UNICODE_REPLACEMENT_CHAR_UTF8) == 0); @@ -131,7 +130,7 @@ static void test_fts_icu_translate_resize(void) buffer_set_used_size(src_utf16, 0); fts_icu_utf8_to_utf16(src_utf16, src_utf8); dest = buffer_create_dynamic(pool_datastack_create(), i); - test_assert(buffer_get_size(dest) == i); + test_assert(buffer_get_writable_size(dest) == i); test_assert(fts_icu_translate(dest, src_utf16->data, src_utf16->used/sizeof(UChar), translit, &error) == 0); @@ -159,12 +158,12 @@ static void test_fts_icu_lcase_resize(void) unsigned int i; test_begin("fts_icu_lcase resize"); - for (i = 2; i <= 4; i++) { + for (i = 1; i <= 3; i++) { dest = t_str_new(i); - test_assert(buffer_get_size(dest) == i); + test_assert(buffer_get_writable_size(dest) == i); fts_icu_lcase(dest, src); test_assert(strcmp(str_c(dest), "a\xC3\xA4") == 0); - test_assert(buffer_get_size(dest) == 4); + test_assert(buffer_get_writable_size(dest) == 3); } test_end(); diff --git a/src/lib-ssl-iostream/ostream-openssl.c b/src/lib-ssl-iostream/ostream-openssl.c index 91fc4d9c99..4a8fe9ecb9 100644 --- a/src/lib-ssl-iostream/ostream-openssl.c +++ b/src/lib-ssl-iostream/ostream-openssl.c @@ -50,7 +50,7 @@ o_stream_ssl_buffer(struct ssl_ostream *sstream, const struct const_iovec *iov, if (sstream->ostream.max_buffer_size == 0) { /* we're requeted to use whatever space is available in the buffer */ - avail = buffer_get_size(sstream->buffer) - sstream->buffer->used; + avail = buffer_get_writable_size(sstream->buffer) - sstream->buffer->used; } else { avail = sstream->ostream.max_buffer_size > sstream->buffer->used ? sstream->ostream.max_buffer_size - sstream->buffer->used : 0; diff --git a/src/lib/aqueue.c b/src/lib/aqueue.c index 26388bd68e..efddd10ed9 100644 --- a/src/lib/aqueue.c +++ b/src/lib/aqueue.c @@ -10,7 +10,7 @@ struct aqueue *aqueue_init(struct array *array) aqueue = i_new(struct aqueue, 1); aqueue->arr = array; - aqueue->area_size = buffer_get_size(aqueue->arr->buffer) / + aqueue->area_size = buffer_get_writable_size(aqueue->arr->buffer) / aqueue->arr->element_size; i_assert(aqueue->area_size > 0); return aqueue; @@ -32,7 +32,7 @@ static void aqueue_grow(struct aqueue *aqueue) orig_area_size = aqueue->area_size; (void)array_append_space_i(aqueue->arr); - aqueue->area_size = buffer_get_size(aqueue->arr->buffer) / + aqueue->area_size = buffer_get_writable_size(aqueue->arr->buffer) / aqueue->arr->element_size; i_assert(orig_area_size < aqueue->area_size); diff --git a/src/lib/str.c b/src/lib/str.c index 4203432ace..8cfd5d207d 100644 --- a/src/lib/str.c +++ b/src/lib/str.c @@ -153,11 +153,11 @@ void str_vprintfa(string_t *str, const char *fmt, va_list args) init_size += SNPRINTF_INITIAL_EXTRA_SIZE; /* @UNSAFE */ - if (pos+init_size > buffer_get_size(str) && - pos < buffer_get_size(str)) { + if (pos+init_size > buffer_get_writable_size(str) && + pos < buffer_get_writable_size(str)) { /* avoid growing buffer larger if possible. this is also required if buffer isn't dynamically growing. */ - init_size = buffer_get_size(str)-pos; + init_size = buffer_get_writable_size(str)-pos; } tmp = buffer_get_space_unsafe(str, pos, init_size); ret = vsnprintf(tmp, init_size, fmt, args);