Skip to content

Commit

Permalink
global: Use buffer_get_writable_size() where possible
Browse files Browse the repository at this point in the history
With 09539f3 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.
  • Loading branch information
sirainen committed Apr 29, 2016
1 parent 62f2f6b commit 8b48c53
Show file tree
Hide file tree
Showing 4 changed files with 16 additions and 17 deletions.
21 changes: 10 additions & 11 deletions src/lib-fts/test-fts-icu.c
Expand Up @@ -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);
Expand All @@ -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);
}
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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);
Expand Down Expand Up @@ -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();
Expand Down
2 changes: 1 addition & 1 deletion src/lib-ssl-iostream/ostream-openssl.c
Expand Up @@ -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;
Expand Down
4 changes: 2 additions & 2 deletions src/lib/aqueue.c
Expand Up @@ -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;
Expand All @@ -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);

Expand Down
6 changes: 3 additions & 3 deletions src/lib/str.c
Expand Up @@ -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);
Expand Down

0 comments on commit 8b48c53

Please sign in to comment.