X-Git-Url: https://pintos-os.org/cgi-bin/gitweb.cgi?a=blobdiff_plain;f=src%2Flibpspp%2Fll.h;h=9e6e35f04ad72ee4af7264883cf080bc49359ad0;hb=81579d9e9f994fb2908f50af41c3eb033d216e58;hp=96ef9a2033502ea47483e83be00ed0549def21ce;hpb=43b1296aafe7582e7dbe6c2b6a8b478d7d9b0fcf;p=pspp-builds.git diff --git a/src/libpspp/ll.h b/src/libpspp/ll.h index 96ef9a20..9e6e35f0 100644 --- a/src/libpspp/ll.h +++ b/src/libpspp/ll.h @@ -1,5 +1,5 @@ /* PSPP - a program for statistical analysis. - Copyright (C) 2006 Free Software Foundation, Inc. + Copyright (C) 2006, 2009, 2011 Free Software Foundation, Inc. This program is free software: you can redistribute it and/or modify it under the terms of the GNU General Public License as published by @@ -50,6 +50,7 @@ #include #include #include +#include "libpspp/cast.h" /* Embedded, circular doubly linked list. @@ -108,8 +109,9 @@ /* Returns the data structure corresponding to the given node LL, assuming that LL is embedded as the given MEMBER name in data type STRUCT. */ -#define ll_data(LL, STRUCT, MEMBER) \ - ((STRUCT *) ((char *) (LL) - offsetof (STRUCT, MEMBER))) +#define ll_data(LL, STRUCT, MEMBER) \ + (CHECK_POINTER_HAS_TYPE(LL, struct ll *), \ + UP_CAST(LL, STRUCT, MEMBER)) /* Linked list node. */ struct ll @@ -336,9 +338,9 @@ struct ll *ll_find_partition (const struct ll *r0, const struct ll *r1, #define ll_tail__(STRUCT, MEMBER, LIST) \ ll_data__ (ll_tail (LIST), STRUCT, MEMBER, LIST) #define ll_next__(DATA, STRUCT, MEMBER, LIST) \ - ll_data__ (ll_next (&DATA->MEMBER), STRUCT, MEMBER, LIST) + ll_data__ (ll_next (&(DATA)->MEMBER), STRUCT, MEMBER, LIST) #define ll_prev__(DATA, STRUCT, MEMBER, LIST) \ - ll_data__ (ll_prev (&DATA->MEMBER), STRUCT, MEMBER, LIST) + ll_data__ (ll_prev (&(DATA)->MEMBER), STRUCT, MEMBER, LIST) /* Inline functions. */ @@ -378,7 +380,7 @@ ll_tail (const struct ll_list *list) static inline struct ll * ll_null (const struct ll_list *list) { - return (struct ll *) &list->null; + return CONST_CAST (struct ll *, &list->null); } /* Returns the node following LL in its list,