eina: fix rounding logic to avoid making the array to short.
authorCedric Bail <cedric.bail@samsung.com>
Fri, 29 Nov 2013 06:30:32 +0000 (15:30 +0900)
committerCedric Bail <cedric.bail@samsung.com>
Fri, 29 Nov 2013 06:33:51 +0000 (15:33 +0900)
I have no idea how the previous formula was supposed to work at all, but
this one is the same as our alignof code to make sure we do allocate to
the really nearest size and don't do over allocation. Additionnaly it works.

src/lib/eina/eina_array.c

index ab853a0..dddcf73 100644 (file)
@@ -363,7 +363,7 @@ eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data,
         else
           {
              // realloc back down - rounding up to the nearest step size
-             size = (array->count + array->step - 1) % array->step;
+             size = ((array->count / array->step) + (array->count % array->step ? 1 : 0)) * array->step;
              tmp = realloc(array->data, sizeof(void *) * size);
              if (!tmp) return EINA_FALSE;
              array->total = size;