From: Lucas De Marchi Date: Mon, 18 Nov 2013 13:28:28 +0000 (-0200) Subject: array: avoid duplicate code to reallocate X-Git-Tag: v16~4 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=cacbcc4215f65c3ae1a49e9b3c6858226f56e1a2;p=thirdparty%2Fkmod.git array: avoid duplicate code to reallocate --- diff --git a/libkmod/libkmod-array.c b/libkmod/libkmod-array.c index 8417f9a9..1082debf 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;