diff options
author | Glenn Strauss <gstrauss@gluelogic.com> | 2019-07-14 03:36:22 -0400 |
---|---|---|
committer | Glenn Strauss <gstrauss@gluelogic.com> | 2020-02-24 11:14:45 -0500 |
commit | d22e7a769da32de30912a18eb97f610cbd8ec568 (patch) | |
tree | 913775a1b7fde958437e4d2678168714a15b56b2 /src/buffer.c | |
parent | c22ec74770a4fbabc3d4e5cfd2ec55d6d660fd23 (diff) | |
download | lighttpd-git-d22e7a769da32de30912a18eb97f610cbd8ec568.tar.gz |
[core] cold buffer_string_prepare_append_resize()
Diffstat (limited to 'src/buffer.c')
-rw-r--r-- | src/buffer.c | 20 |
1 files changed, 12 insertions, 8 deletions
diff --git a/src/buffer.c b/src/buffer.c index 5a665883..11fd473b 100644 --- a/src/buffer.c +++ b/src/buffer.c @@ -85,7 +85,9 @@ static void buffer_realloc(buffer *b, size_t len) { } __attribute_cold__ +__attribute_noinline__ static void buffer_alloc_replace(buffer *b, size_t size) { + force_assert(NULL != b); /*(discard old data so realloc() does not copy)*/ if (NULL != b->ptr) { free(b->ptr); @@ -95,20 +97,16 @@ static void buffer_alloc_replace(buffer *b, size_t size) { } char* buffer_string_prepare_copy(buffer *b, size_t size) { - force_assert(NULL != b); - - if (size >= b->size) buffer_alloc_replace(b, size); + if (NULL == b || size >= b->size) buffer_alloc_replace(b, size); b->used = 0; return b->ptr; } -char* buffer_string_prepare_append(buffer *b, size_t size) { +__attribute_cold__ +__attribute_noinline__ +static char* buffer_string_prepare_append_resize(buffer *b, size_t size) { force_assert(NULL != b); - - if (b->used && size < b->size - b->used) - return b->ptr + b->used - 1; - if (buffer_string_is_empty(b)) { return buffer_string_prepare_copy(b, size); } else { @@ -124,6 +122,12 @@ char* buffer_string_prepare_append(buffer *b, size_t size) { } } +char* buffer_string_prepare_append(buffer *b, size_t size) { + return (NULL != b && size < b->size - b->used) + ? b->ptr + b->used - (0 != b->used) + : buffer_string_prepare_append_resize(b, size); +} + void buffer_string_set_length(buffer *b, size_t len) { force_assert(NULL != b); |