* @cond LOCAL
*/
-#define EINA_MAGIC_CHECK_LIST(d) \
+#define EINA_MAGIC_CHECK_LIST(d, ...) \
do { \
if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST)) \
- EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST); \
+ { \
+ EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST); \
+ return __VA_ARGS__; \
+ } \
} while(0);
-#define EINA_MAGIC_CHECK_LIST_ITERATOR(d) \
+#define EINA_MAGIC_CHECK_LIST_ITERATOR(d, ...) \
do { \
if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ITERATOR)) \
- EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ITERATOR); \
+ { \
+ EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ITERATOR); \
+ return __VA_ARGS__; \
+ } \
} while(0);
-#define EINA_MAGIC_CHECK_LIST_ACCESSOR(d) \
+#define EINA_MAGIC_CHECK_LIST_ACCESSOR(d, ...) \
do { \
if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCESSOR)) \
- EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCESSOR); \
+ { \
+ EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCESSOR); \
+ return __VA_ARGS__; \
+ } \
} while(0);
#define EINA_MAGIC_CHECK_LIST_ACCOUNTING(d) \
do { \
if (!EINA_MAGIC_CHECK(d, EINA_MAGIC_LIST_ACCOUNTING)) \
- EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING); \
+ { \
+ EINA_MAGIC_FAIL(d, EINA_MAGIC_LIST_ACCOUNTING); \
+ return; \
+ } \
} while(0);
#define EINA_LIST_SORT_STACK_SIZE 32
static Eina_List *
_eina_list_setup_accounting(Eina_List *list)
{
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
list->accounting = _eina_list_mempool_accounting_new(list);
if (!list->accounting) goto on_error;
static Eina_Bool
eina_list_iterator_next(Eina_Iterator_List *it, void **data)
{
- EINA_MAGIC_CHECK_LIST_ITERATOR(it);
+ EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE);
if (it->current == NULL) return EINA_FALSE;
if (data) *data = eina_list_data_get(it->current);
static Eina_Bool
eina_list_iterator_prev(Eina_Iterator_List *it, void **data)
{
- EINA_MAGIC_CHECK_LIST_ITERATOR(it);
+ EINA_MAGIC_CHECK_LIST_ITERATOR(it, EINA_FALSE);
if (it->current == NULL) return EINA_FALSE;
if (data) *data = eina_list_data_get(it->current);
static Eina_List *
eina_list_iterator_get_container(Eina_Iterator_List *it)
{
- EINA_MAGIC_CHECK_LIST_ITERATOR(it);
+ EINA_MAGIC_CHECK_LIST_ITERATOR(it, NULL);
return (Eina_List *) it->head;
}
unsigned int middle;
unsigned int i;
- EINA_MAGIC_CHECK_LIST_ACCESSOR(it);
+ EINA_MAGIC_CHECK_LIST_ACCESSOR(it, EINA_FALSE);
if (index > eina_list_count(it->head)) return EINA_FALSE;
static Eina_List *
eina_list_accessor_get_container(Eina_Accessor_List *it)
{
- EINA_MAGIC_CHECK_LIST_ACCESSOR(it);
+ EINA_MAGIC_CHECK_LIST_ACCESSOR(it, NULL);
return (Eina_List *) it->head;
}
{
Eina_List *prev = NULL;
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
for (; list; list = list->next)
{
return _eina_list_setup_accounting(new_l);
}
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
l = list->accounting->last;
list->accounting->last = new_l;
if (!list) return _eina_list_setup_accounting(new_l);
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
list->prev = new_l;
{
Eina_List *l;
void *list_data;
-
- if (list) EINA_MAGIC_CHECK_LIST(list);
+
+ if (list) EINA_MAGIC_CHECK_LIST(list, NULL);
EINA_LIST_FOREACH(list, l, list_data)
{
new_l = _eina_list_mempool_list_new(list);
if (!new_l) return list;
- EINA_MAGIC_CHECK_LIST(relative);
+ EINA_MAGIC_CHECK_LIST(relative, NULL);
new_l->next = relative->next;
new_l->data = (void *)data;
{
Eina_List *l;
void *list_data;
-
- if (list) EINA_MAGIC_CHECK_LIST(list);
+
+ if (list) EINA_MAGIC_CHECK_LIST(list, NULL);
EINA_LIST_FOREACH(list, l, list_data)
{
new_l = _eina_list_mempool_list_new(list);
if (!new_l) return list;
- EINA_MAGIC_CHECK_LIST(relative);
+ EINA_MAGIC_CHECK_LIST(relative, NULL);
new_l->prev = relative->prev;
new_l->next = relative;
{
Eina_List *l;
- if (list) EINA_MAGIC_CHECK_LIST(list);
+ if (list) EINA_MAGIC_CHECK_LIST(list, NULL);
l = eina_list_data_find_list(list, data);
return eina_list_remove_list(list, l);
if (!list) return NULL;
if (!remove_list) return list;
- EINA_MAGIC_CHECK_LIST(remove_list);
+ EINA_MAGIC_CHECK_LIST(remove_list, NULL);
if (remove_list->next) remove_list->next->prev = remove_list->prev;
if (remove_list->prev)
return_l = remove_list->next;
if (remove_list == remove_list->accounting->last)
{
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
list->accounting->last = remove_list->prev;
}
_eina_list_mempool_list_free(remove_list);
if (!list) return NULL;
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
for (l = list; l;)
{
if (move_list == list) return list;
if (move_list->next == list) return move_list;
- EINA_MAGIC_CHECK_LIST(list);
- EINA_MAGIC_CHECK_LIST(move_list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
+ EINA_MAGIC_CHECK_LIST(move_list, NULL);
/* Remove the promoted item from the list. */
if (!move_list->prev)
/* Demoting tail to be tail. */
if (move_list == list->accounting->last) return list;
- EINA_MAGIC_CHECK_LIST(list);
- EINA_MAGIC_CHECK_LIST(move_list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
+ EINA_MAGIC_CHECK_LIST(move_list, NULL);
/* Update pointer list if necessary. */
if (list == move_list)
const Eina_List *l;
void *list_data;
- if (list) EINA_MAGIC_CHECK_LIST(list);
+ if (list) EINA_MAGIC_CHECK_LIST(list, NULL);
EINA_LIST_FOREACH(list, l, list_data)
{
const Eina_List *l;
unsigned int i;
- if (list) EINA_MAGIC_CHECK_LIST(list);
+ if (list) EINA_MAGIC_CHECK_LIST(list, NULL);
/* check for non-existing nodes */
if ((!list) || (n > (list->accounting->count - 1)))
if (!list) return NULL;
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
l1 = list;
l2 = list->accounting->last;
if (!list) return NULL;
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
clone = NULL;
EINA_LIST_FOREACH(list, l, data)
if (!list) return NULL;
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
clone = NULL;
EINA_LIST_FOREACH(list, l, data)
EINA_SAFETY_ON_NULL_RETURN_VAL(func, list);
if (!list) return NULL;
- EINA_MAGIC_CHECK_LIST(list);
+ EINA_MAGIC_CHECK_LIST(list, NULL);
/* if the caller specified an invalid size, sort the whole list */
if ((size == 0) ||