diff --git a/legacy/eina/ChangeLog b/legacy/eina/ChangeLog index 9372b9ce31..fc31b21ce8 100644 --- a/legacy/eina/ChangeLog +++ b/legacy/eina/ChangeLog @@ -218,3 +218,7 @@ this is a same kind of visual hint for the purpose of the pointer, but again, the two types are interchangeable. +2012-02-17 Cedric Bail + + * Fix forgotten initialization of eina list count during eina_list_split_list. + diff --git a/legacy/eina/src/lib/eina_list.c b/legacy/eina/src/lib/eina_list.c index b83e71599c..c85855f328 100644 --- a/legacy/eina/src/lib/eina_list.c +++ b/legacy/eina/src/lib/eina_list.c @@ -1172,6 +1172,7 @@ eina_list_split_list(Eina_List *list, Eina_List *relative, Eina_List **right) next->prev = NULL; next->accounting = _eina_list_mempool_accounting_new(next); next->accounting->last = list->accounting->last; + next->accounting->count = 0; *right = next; itr = next; diff --git a/legacy/eina/src/tests/eina_test_list.c b/legacy/eina/src/tests/eina_test_list.c index 6e088473d1..ce70d03f2f 100644 --- a/legacy/eina/src/tests/eina_test_list.c +++ b/legacy/eina/src/tests/eina_test_list.c @@ -338,10 +338,50 @@ START_TEST(eina_test_sorted_insert) } END_TEST +START_TEST(eina_test_list_split) +{ + Eina_List *left = NULL, *right = NULL ; + Eina_List *list = NULL; + Eina_List *l; + void *list_data; + int i; + + eina_init(); + + list = eina_list_append(list, "tigh"); + list = eina_list_append(list, "adar"); + list = eina_list_append(list, "baltar"); + list = eina_list_append(list, "roslin"); + list = eina_list_append(list, "baltar"); + list = eina_list_append(list, "roslin"); + list = eina_list_append(list, "baltar"); + list = eina_list_append(list, "roslin"); + + fail_if(list == NULL); + fail_if(eina_list_count(list) != 8); + + for ( i = 0; i < 200; i++) + { + left = eina_list_split_list(list, eina_list_nth_list(list, i % 2), &right); + + if (i % 2 == 0) + fail_if(eina_list_count(left) == 1 && eina_list_count(right) + eina_list_count(left) == i + 7); + else + fail_if(eina_list_count(left) == 2 && eina_list_count(right) + eina_list_count(left) == i + 7); + + list = eina_list_merge(left, right); + list = eina_list_append(list, "roslin"); + } + + eina_shutdown(); +} +END_TEST + void eina_test_list(TCase *tc) { tcase_add_test(tc, eina_test_simple); tcase_add_test(tc, eina_test_merge); tcase_add_test(tc, eina_test_sorted_insert); + tcase_add_test(tc, eina_test_list_split); }