eina: Fix EINA_INLIST_FOREACH_SAFE macro
EINA_INLIST_FOREACH_SAFE is very broken and it only works by luck, depending on the __inlist field being the first one in the struct. Until now. This commit makes the following snippet to work: #include <Eina.h> typedef struct _data { char *name; EINA_INLIST; } data; int main() { Eina_Inlist *inlist = NULL, *inlist_safe; data *reg, *d; reg = malloc(sizeof(data)); inlist = eina_inlist_append(inlist, EINA_INLIST_GET(reg)); EINA_INLIST_FOREACH_SAFE(inlist, inlist_safe, d) { printf("%p\n", d); inlist = eina_inlist_remove(inlist, EINA_INLIST_GET(d)); free(d); } return 0; } Patch-by: José Roberto de Souza <zehortigoza@profusion.mobi> SVN revision: 76150
This commit is contained in:
parent
7457f675ff
commit
45a791dfa1
|
@ -803,7 +803,7 @@ EAPI Eina_Inlist *eina_inlist_sort(Eina_Inlist *head, Eina_Compare_Cb func);
|
|||
#define EINA_INLIST_FOREACH_SAFE(list, list2, l) \
|
||||
for (l = (list ? _EINA_INLIST_CONTAINER(l, list) : NULL), list2 = l ? ((EINA_INLIST_GET(l) ? EINA_INLIST_GET(l)->next : NULL)) : NULL; \
|
||||
l; \
|
||||
l = _EINA_INLIST_CONTAINER(l, list2), list2 = list2 ? list2->next : NULL)
|
||||
l = list2 ? _EINA_INLIST_CONTAINER(l, list2) : NULL, list2 = list2 ? list2->next : NULL)
|
||||
/**
|
||||
* @def EINA_INLIST_REVERSE_FOREACH
|
||||
* @param list The list to be reversed.
|
||||
|
|
Loading…
Reference in New Issue