Enlightenment CVS committal
Author : cedric
Project : e17
Module : proto/eina
Dir : e17/proto/eina/src/lib
Modified Files:
eina_array.c
Log Message:
Fix improved version of eina_array_remove.
===================================================================
RCS file: /cvs/e/e17/proto/eina/src/lib/eina_array.c,v
retrieving revision 1.4
retrieving revision 1.5
diff -u -3 -r1.4 -r1.5
--- eina_array.c 7 Aug 2008 13:11:13 -0000 1.4
+++ eina_array.c 7 Aug 2008 17:12:06 -0000 1.5
@@ -110,6 +110,7 @@
eina_array_remove(Eina_Array *array, Eina_Bool (*keep)(void *data, void
*gdata), void *gdata)
{
void **tmp;
+ void *data;
unsigned int total = 0;
unsigned int limit;
unsigned int i;
@@ -118,22 +119,17 @@
for (i = 0; i < array->count; ++i)
{
- void *data;
-
data = _eina_array_get(array, i);
- if (keep(data, gdata) == EINA_FALSE)
- break;
+ if (keep(data, gdata) == EINA_FALSE) break;
}
limit = i;
+ if (i < array->count) ++i;
for (; i < array->count; ++i)
{
- void *data;
-
data = _eina_array_get(array, i);
- if (keep(data, gdata) == EINA_TRUE)
- break;
+ if (keep(data, gdata) == EINA_TRUE) break;
}
/* Special case all objects that need to stay are at the beginning of the
array. */
if (i == array->count)
@@ -159,10 +155,15 @@
memcpy(tmp, array->data, limit * sizeof(void*));
total = limit;
- for (; i < array->count; ++i)
+ if (i < array->count)
{
- void *data;
+ tmp[total] = data;
+ total++;
+ ++i;
+ }
+ for (; i < array->count; ++i)
+ {
data = _eina_array_get(array, i);
if (keep(data, gdata))
-------------------------------------------------------------------------
This SF.Net email is sponsored by the Moblin Your Move Developer's challenge
Build the coolest Linux based applications with Moblin SDK & win great prizes
Grand prize is a trip for two to an Open Source event anywhere in the world
http://moblin-contest.org/redirect.php?banner_id=100&url=/
_______________________________________________
enlightenment-cvs mailing list
[email protected]
https://lists.sourceforge.net/lists/listinfo/enlightenment-cvs