diff --git a/src/lib/eina/eina_inline_value.x b/src/lib/eina/eina_inline_value.x --- a/src/lib/eina/eina_inline_value.x +++ b/src/lib/eina/eina_inline_value.x @@ -979,13 +979,14 @@ if (!desc) return EINA_FALSE; - if (!desc->list) + if (!desc->list && position == 0) node = desc->list = eina_list_append(NULL, (void*)1L); else if (position == 0) node = desc->list = eina_list_prepend(desc->list, (void*)1L); else { Eina_List *rel = eina_list_nth_list(desc->list, position - 1); + EINA_SAFETY_ON_FALSE_RETURN_VAL(rel, EINA_FALSE); desc->list = eina_list_append_relative_list(desc->list, (void*)1L, rel); node = rel->next; } @@ -1734,7 +1735,7 @@ mem = eina_value_memory_get(value); if (!mem) return NULL; - + if(2*sizeof(void*) <= sizeof(Eina_Value_Union)) { Eina_Value_Optional_Outer* opt = (Eina_Value_Optional_Outer*)mem; diff --git a/src/tests/eina/eina_test_value.c b/src/tests/eina/eina_test_value.c --- a/src/tests/eina/eina_test_value.c +++ b/src/tests/eina/eina_test_value.c @@ -2158,6 +2158,48 @@ } EFL_END_TEST +EFL_START_TEST(eina_value_test_list_insert) +{ + Eina_Value *value; + char c; + char *str; + char buf[1024]; + + value = eina_value_list_new(EINA_VALUE_TYPE_CHAR); + fail_unless(value != NULL); + + fail_unless(eina_value_list_count(value) == 0); + fail_unless(!eina_value_list_insert(value, 1, '-')); + fail_unless(!eina_value_list_insert(value, 10, 'j')); + fail_unless(eina_value_list_count(value) == 0); + + fail_unless(eina_value_list_insert(value, 0, 'k')); + fail_unless(eina_value_list_insert(value, 1, '-')); + fail_unless(eina_value_list_insert(value, 0, 's')); + fail_unless(eina_value_list_insert(value, 1, 'j')); + fail_unless(eina_value_list_count(value) == 4); + + fail_unless(eina_value_list_get(value, 0, &c)); + fail_unless(c == 's'); + fail_unless(eina_value_list_get(value, 1, &c)); + fail_unless(c == 'j'); + fail_unless(eina_value_list_get(value, 2, &c)); + fail_unless(c == 'k'); + fail_unless(eina_value_list_get(value, 3, &c)); + fail_unless(c == '-'); + + snprintf(buf, sizeof(buf), "[%d, %d, %d, %d]", + (int) 's', (int) 'j', (int) 'k', (int) '-'); + + str = eina_value_to_string(value); + fail_unless(str != NULL); + ck_assert_str_eq(str, buf); + + free(str); + eina_value_free(value); +} +EFL_END_TEST + EFL_START_TEST(eina_value_test_list) { Eina_Value *value, other; @@ -3031,6 +3073,7 @@ // TODO: other converters... tcase_add_test(tc, eina_value_test_array); tcase_add_test(tc, eina_value_test_list); + tcase_add_test(tc, eina_value_test_list_insert); tcase_add_test(tc, eina_value_test_hash); tcase_add_test(tc, eina_value_test_timeval); tcase_add_test(tc, eina_value_test_blob);