---
libkmod/libkmod-array.c | 38 +++++++++++++++++++-------------------
1 file changed, 19 insertions(+), 19 deletions(-)
diff --git a/libkmod/libkmod-array.c b/libkmod/libkmod-array.c
index 8417f9a..1082deb 100644
--- a/libkmod/libkmod-array.c
+++ b/libkmod/libkmod-array.c
@@ -28,6 +28,17 @@
/* basic pointer array growing in steps */
+
+static int array_realloc(struct array *array, size_t new_total)
+{
+ void *tmp = realloc(array->array, sizeof(void *) * new_total);
+ if (tmp == NULL)
+ return -ENOMEM;
+ array->array = tmp;
+ array->total = new_total;
+ return 0;
+}
+
void array_init(struct array *array, size_t step)
{
assert(step > 0);
@@ -42,13 +53,9 @@ int array_append(struct array *array, const void *element)
size_t idx;
if (array->count + 1 >= array->total) {
- size_t new_total = array->total + array->step;
- void *tmp = realloc(array->array, sizeof(void *) * new_total);
- assert(array->step > 0);
- if (tmp == NULL)
- return -ENOMEM;
- array->array = tmp;
- array->total = new_total;
+ int r = array_realloc(array, array->total + array->step);
+ if (r < 0)
+ return r;
}
idx = array->count;
array->array[idx] = (void *)element;
@@ -69,13 +76,9 @@ int array_append_unique(struct array *array, const void
*element)
void array_pop(struct array *array) {
array->count--;
if (array->count + array->step < array->total) {
- size_t new_total = array->total - array->step;
- void *tmp = realloc(array->array, sizeof(void *) * new_total);
- assert(array->step > 0);
- if (tmp == NULL)
+ int r = array_realloc(array, array->total - array->step);
+ if (r < 0)
return;
- array->array = tmp;
- array->total = new_total;
}
}
@@ -102,13 +105,10 @@ int array_remove_at(struct array *array, unsigned int pos)
sizeof(void *) * (array->count - pos));
if (array->count + array->step < array->total) {
- size_t new_total = array->total - array->step;
- void *tmp = realloc(array->array, sizeof(void *) * new_total);
- assert(array->step > 0);
- if (tmp == NULL)
+ int r = array_realloc(array, array->total - array->step);
+ /* ignore error */
+ if (r < 0)
return 0;
- array->array = tmp;
- array->total = new_total;
}
return 0;
--
1.8.4.2
--
To unsubscribe from this list: send the line "unsubscribe linux-modules" in
the body of a message to [email protected]
More majordomo info at http://vger.kernel.org/majordomo-info.html