summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorSøren Sandmann Pedersen <sandmann@daimi.au.dk>2009-04-17 19:12:40 -0400
committerSøren Sandmann Pedersen <sandmann@daimi.au.dk>2009-04-17 19:12:40 -0400
commitff336094ae0271b3f8b39309cdf5d3095fa846ed (patch)
tree6eb362248d3c3b087458c312a546e2a8f8c9f35f
parent907e9b9b9867f1340a26af956ff56826ea4b0ffb (diff)
Make array_append_undefined() generically useful
-rw-r--r--array.c29
1 files changed, 19 insertions, 10 deletions
diff --git a/array.c b/array.c
index 945c4d4..c3ab83b 100644
--- a/array.c
+++ b/array.c
@@ -138,6 +138,23 @@ array_delete_tail (array_t *array, int n_elements)
return array;
}
+static array_t * G_GNUC_WARN_UNUSED_RESULT
+array_append_undefined (array_t *array,
+ int n_elements,
+ void **tail)
+{
+ array = realloc_array (array, array->n_elements + n_elements * array->element_size);
+
+ array->n_elements += n_elements;
+
+ nul_terminate (array);
+
+ if (tail)
+ *tail = (char *)array->data + array->element_size * (array->n_elements - n_elements);
+
+ return array;
+}
+
/* Generic arrays
*
* The idiomatic way to use them is like this:
@@ -285,18 +302,10 @@ nul_string_append_undefined (nul_string_t *str,
char **tail)
{
array_t *array = get_array (str, &string_t_magic);
-
- array = realloc_array (array, array->n_elements + n_bytes);
- array->n_elements += n_bytes;
- str = (nul_string_t *)array->data;
+ array = array_append_undefined (array, n_bytes, (void **)tail);
- str[array->n_elements] = '\0';
-
- if (tail)
- *tail = str + array->n_elements - n_bytes;
-
- return str;
+ return (nul_string_t *)array->data;
}
nul_string_t *