[utils] char_array_cat_printf was forcing a doubling of the size of the buffer, which is bad if calling many times. Now only initiates a realloc if the char_array is almost full. Also adding cstring_array_from_strings which takes a list of char *s
This commit is contained in:
@@ -464,7 +464,7 @@ inline char *char_array_to_string(char_array *array) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
static inline void char_array_strip_nul_byte(char_array *array) {
|
inline void char_array_strip_nul_byte(char_array *array) {
|
||||||
if (array->n > 0 && array->a[array->n - 1] == '\0') {
|
if (array->n > 0 && array->a[array->n - 1] == '\0') {
|
||||||
array->a[array->n - 1] = '\0';
|
array->a[array->n - 1] = '\0';
|
||||||
array->n--;
|
array->n--;
|
||||||
@@ -605,7 +605,7 @@ void char_array_cat_vprintf(char_array *array, char *format, va_list args) {
|
|||||||
size_t buflen;
|
size_t buflen;
|
||||||
|
|
||||||
size_t last_n = array->n;
|
size_t last_n = array->n;
|
||||||
size_t size = array->m < 8 ? 16 : array->m * 2;
|
size_t size = array->m - array->n <= 2 ? array->m * 2 : array->m;
|
||||||
|
|
||||||
while(1) {
|
while(1) {
|
||||||
char_array_resize(array, size);
|
char_array_resize(array, size);
|
||||||
@@ -685,6 +685,15 @@ cstring_array *cstring_array_from_char_array(char_array *str) {
|
|||||||
return array;
|
return array;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
cstring_array *cstring_array_from_strings(char **strings, size_t n) {
|
||||||
|
cstring_array *array = cstring_array_new();
|
||||||
|
for (size_t i = 0; i < n; i++) {
|
||||||
|
cstring_array_start_token(array);
|
||||||
|
cstring_array_add_string(array, strings[i]);
|
||||||
|
}
|
||||||
|
return array;
|
||||||
|
}
|
||||||
|
|
||||||
inline size_t cstring_array_capacity(cstring_array *self) {
|
inline size_t cstring_array_capacity(cstring_array *self) {
|
||||||
return self->str->m;
|
return self->str->m;
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user