diff --git a/src/utils/strbuf.c b/src/utils/strbuf.c
index c310b443448a14be1eb96f8c7fdc4618707868c5..ecc05315ef897f9d84a415ccecb9b6f77e89e9bd 100644 (file)
--- a/src/utils/strbuf.c
+++ b/src/utils/strbuf.c
/* free memory if most of the buffer is unused */
#define CHECK_SHRINK(buf) \
do { \
- if ((buf)->pos < (buf)->size / 3) \
+ if (((buf)->pos < (buf)->size / 3) \
+ && (2 * (buf)->pos > (buf)->min_size)) \
/* don't free all memory to avoid churn */ \
strbuf_resize((buf), 2 * (buf)->pos); \
} while (0)
char *string;
size_t size;
size_t pos;
+
+ /* min size to shrink the buffer to */
+ size_t min_size;
};
/*
}
buf->string[0] = '\0';
+ buf->min_size = size;
}
+ else
+ buf->min_size = 64;
buf->size = size;
buf->pos = 0;