On Wed, 9 Sep 2009, Enlightenment SVN wrote:
Modified: trunk/eina/src/include/eina_inlist.h =================================================================== --- trunk/eina/src/include/eina_inlist.h 2009-09-09 10:44:25 UTC (rev 42365) +++ trunk/eina/src/include/eina_inlist.h 2009-09-09 14:05:31 UTC (rev 42366) @@ -52,7 +52,7 @@ #define EINA_INLIST Eina_Inlist __in_list #define EINA_INLIST_GET(Inlist) (&((Inlist)->__in_list)) -#define EINA_INLIST_CONTAINER_GET(ptr, type) ((type *) ((Eina_Inlist *) ptr - offsetof(type, __in_list))) +#define EINA_INLIST_CONTAINER_GET(ptr, type) ((type *) ((char *) ptr - offsetof(type, __in_list)))
Iirc, i have already said that offsetof does not exist on Windows CEAlso, I don't know if it is important or not, but on OpenSolaris with suncc, char is a signed type (-128...127)
Vincent
EAPI Eina_Inlist * eina_inlist_append(Eina_Inlist *in_list, Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; EAPI Eina_Inlist * eina_inlist_prepend(Eina_Inlist *in_list, Eina_Inlist *in_item) EINA_ARG_NONNULL(2) EINA_WARN_UNUSED_RESULT; @@ -67,9 +67,14 @@ EAPI Eina_Iterator *eina_inlist_iterator_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; EAPI Eina_Accessor *eina_inlist_accessor_new(const Eina_Inlist *in_list) EINA_MALLOC EINA_WARN_UNUSED_RESULT; -#define EINA_INLIST_FOREACH(list, l) for (l = (void*)list; l; l = (void*)(l->__in_list.next)) -#define EINA_INLIST_REVERSE_FOREACH(list, l) for (l = (list ? (void*)(list->last) : NULL); l; l = (void*)(l->__in_list.prev)) +/* This two macros are helpers for the _FOREACH ones, don't use them */ +#define INLIST_OFFSET(ref) ((char*)&(ref)->__in_list - (char*)(ref)) +#define INLIST_CONTAINER(ref, ptr) (void*)((char*)(ptr) - INLIST_OFFSET(ref)) +#define EINA_INLIST_FOREACH(list, l) for (l = (list ? INLIST_CONTAINER(l, list) : NULL); l; l = (EINA_INLIST_GET(l)->next ? INLIST_CONTAINER(l, EINA_INLIST_GET(l)->next) : NULL)) +#define EINA_INLIST_REVERSE_FOREACH(list, l) for (l = (list ? INLIST_CONTAINER(l, list->last) : NULL); l; l = (EINA_INLIST_GET(l)->prev ? INLIST_CONTAINER(l, EINA_INLIST_GET(l)->prev) : NULL)) + + /** * @} */ Modified: trunk/eina/src/tests/eina_test_inlist.c =================================================================== --- trunk/eina/src/tests/eina_test_inlist.c 2009-09-09 10:44:25 UTC (rev 42365) +++ trunk/eina/src/tests/eina_test_inlist.c 2009-09-09 14:05:31 UTC (rev 42366) @@ -30,8 +30,8 @@ typedef struct _Eina_Test_Inlist Eina_Test_Inlist; struct _Eina_Test_Inlist { + int i; EINA_INLIST; - int i; }; static Eina_Test_Inlist* @@ -63,13 +63,13 @@ tmp = _eina_test_inlist_build(1664); lst = eina_inlist_append_relative(lst, EINA_INLIST_GET(tmp), lst); fail_if(!lst); - fail_if(((Eina_Test_Inlist*)lst)->i != 42); + fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42); prev = tmp; tmp = _eina_test_inlist_build(3227); lst = eina_inlist_prepend_relative(lst, EINA_INLIST_GET(tmp), EINA_INLIST_GET(prev)); fail_if(!lst); - fail_if(((Eina_Test_Inlist*)lst)->i != 42); + fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist)->i != 42); lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp)); @@ -111,16 +111,17 @@ fail_if(eina_error_get() != EINA_ERROR_SAFETY_FAILED); #endif - tmp = (Eina_Test_Inlist*) lst; + tmp = EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist); lst = eina_inlist_demote(lst, lst); - fail_if(lst == (Eina_Inlist*) tmp); + fail_if(EINA_INLIST_CONTAINER_GET(lst, Eina_Test_Inlist) == tmp); lst = eina_inlist_promote(lst, EINA_INLIST_GET(tmp)); - fail_if(lst != (Eina_Inlist*) tmp); + fail_if(lst != EINA_INLIST_GET(tmp)); - tmp = (Eina_Test_Inlist*) eina_inlist_find(lst, EINA_INLIST_GET(prev)); + tmp = EINA_INLIST_CONTAINER_GET(eina_inlist_find(lst, EINA_INLIST_GET(prev)), Eina_Test_Inlist); lst = eina_inlist_remove(lst, EINA_INLIST_GET(tmp)); - tmp = (Eina_Test_Inlist*) eina_inlist_find(lst, EINA_INLIST_GET(tmp)); + prev = eina_inlist_find(lst, EINA_INLIST_GET(tmp)); + tmp = prev ? EINA_INLIST_CONTAINER_GET(prev, Eina_Test_Inlist) : NULL; fail_if(tmp != NULL); while (lst) ------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july _______________________________________________ enlightenment-svn mailing list enlightenment-...@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-svn -- Ce message a été vérifié par MailScanner pour des virus ou des polluriels et rien de suspect n'a été trouvé. Message délivré par le serveur de messagerie de l'Université d'Evry.
------------------------------------------------------------------------------ Let Crystal Reports handle the reporting - Free Crystal Reports 2008 30-Day trial. Simplify your report design, integration and deployment - and focus on what you do best, core application coding. Discover what's new with Crystal Reports now. http://p.sf.net/sfu/bobj-july
_______________________________________________ enlightenment-devel mailing list enlightenment-devel@lists.sourceforge.net https://lists.sourceforge.net/lists/listinfo/enlightenment-devel