summaryrefslogtreecommitdiff
path: root/src/buffer.c
diff options
context:
space:
mode:
authorGlenn Strauss <gstrauss@gluelogic.com>2019-07-14 03:36:22 -0400
committerGlenn Strauss <gstrauss@gluelogic.com>2020-02-24 11:14:45 -0500
commitd22e7a769da32de30912a18eb97f610cbd8ec568 (patch)
tree913775a1b7fde958437e4d2678168714a15b56b2 /src/buffer.c
parentc22ec74770a4fbabc3d4e5cfd2ec55d6d660fd23 (diff)
downloadlighttpd-git-d22e7a769da32de30912a18eb97f610cbd8ec568.tar.gz
[core] cold buffer_string_prepare_append_resize()
Diffstat (limited to 'src/buffer.c')
-rw-r--r--src/buffer.c20
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);