53
53
((char *) &(ptr)->field == (char *) &((type) (ptr))->field)
55
55
#define GRUB_AS_LIST(ptr) \
56
(GRUB_FIELD_MATCH (ptr, grub_list_t, next) ? \
57
(grub_list_t) ptr : grub_bad_type_cast ())
56
(GRUB_FIELD_MATCH (ptr, grub_list_t, next) && GRUB_FIELD_MATCH (ptr, grub_list_t, prev) ? \
57
(grub_list_t) ptr : (grub_list_t) grub_bad_type_cast ())
59
59
#define GRUB_AS_LIST_P(pptr) \
60
(GRUB_FIELD_MATCH (*pptr, grub_list_t, next) ? \
61
(grub_list_t *) (void *) pptr : grub_bad_type_cast ())
60
(GRUB_FIELD_MATCH (*pptr, grub_list_t, next) && GRUB_FIELD_MATCH (*pptr, grub_list_t, prev) ? \
61
(grub_list_t *) (void *) pptr : (grub_list_t *) grub_bad_type_cast ())
63
63
struct grub_named_list
65
65
struct grub_named_list *next;
66
struct grub_named_list **prev;
68
69
typedef struct grub_named_list *grub_named_list_t;
73
74
#define GRUB_AS_NAMED_LIST(ptr) \
74
((GRUB_FIELD_MATCH (ptr, grub_named_list_t, next) && \
75
GRUB_FIELD_MATCH (ptr, grub_named_list_t, name))? \
76
(grub_named_list_t) ptr : grub_bad_type_cast ())
75
((GRUB_FIELD_MATCH (ptr, grub_named_list_t, next) \
76
&& GRUB_FIELD_MATCH (ptr, grub_named_list_t, prev) \
77
&& GRUB_FIELD_MATCH (ptr, grub_named_list_t, name))? \
78
(grub_named_list_t) ptr : (grub_named_list_t) grub_bad_type_cast ())
78
80
#define GRUB_AS_NAMED_LIST_P(pptr) \
79
((GRUB_FIELD_MATCH (*pptr, grub_named_list_t, next) && \
80
GRUB_FIELD_MATCH (*pptr, grub_named_list_t, name))? \
81
(grub_named_list_t *) (void *) pptr : grub_bad_type_cast ())
83
#define GRUB_PRIO_LIST_PRIO_MASK 0xff
84
#define GRUB_PRIO_LIST_FLAG_ACTIVE 0x100
88
struct grub_prio_list *next;
92
typedef struct grub_prio_list *grub_prio_list_t;
94
void EXPORT_FUNC(grub_prio_list_insert) (grub_prio_list_t *head,
95
grub_prio_list_t item);
98
grub_prio_list_remove (grub_prio_list_t *head, grub_prio_list_t item)
100
if ((item->prio & GRUB_PRIO_LIST_FLAG_ACTIVE) && (item->next))
101
item->next->prio |= GRUB_PRIO_LIST_FLAG_ACTIVE;
102
grub_list_remove (GRUB_AS_LIST_P (head), GRUB_AS_LIST (item));
105
#define GRUB_AS_PRIO_LIST(ptr) \
106
((GRUB_FIELD_MATCH (ptr, grub_prio_list_t, next) && \
107
GRUB_FIELD_MATCH (ptr, grub_prio_list_t, name) && \
108
GRUB_FIELD_MATCH (ptr, grub_prio_list_t, prio))? \
109
(grub_prio_list_t) ptr : grub_bad_type_cast ())
111
#define GRUB_AS_PRIO_LIST_P(pptr) \
112
((GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, next) && \
113
GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, name) && \
114
GRUB_FIELD_MATCH (*pptr, grub_prio_list_t, prio))? \
115
(grub_prio_list_t *) (void *) pptr : grub_bad_type_cast ())
81
((GRUB_FIELD_MATCH (*pptr, grub_named_list_t, next) \
82
&& GRUB_FIELD_MATCH (*pptr, grub_named_list_t, prev) \
83
&& GRUB_FIELD_MATCH (*pptr, grub_named_list_t, name))? \
84
(grub_named_list_t *) (void *) pptr : (grub_named_list_t *) grub_bad_type_cast ())
117
86
#endif /* ! GRUB_LIST_HEADER */