~ubuntu-branches/ubuntu/trusty/grub2/trusty-updates

« back to all changes in this revision

Viewing changes to include/grub/list.h

  • Committer: Package Import Robot
  • Author(s): Colin Watson
  • Date: 2012-09-13 18:02:04 UTC
  • mfrom: (1.17.15 upstream)
  • mto: (17.6.27 experimental)
  • mto: This revision was merged to the branch mainline in revision 145.
  • Revision ID: package-import@ubuntu.com-20120913180204-mojnmocbimlom4im
Tags: upstream-2.00
ImportĀ upstreamĀ versionĀ 2.00

Show diffs side-by-side

added added

removed removed

Lines of Context:
27
27
struct grub_list
28
28
{
29
29
  struct grub_list *next;
 
30
  struct grub_list **prev;
30
31
};
31
32
typedef struct grub_list *grub_list_t;
32
33
 
33
34
void EXPORT_FUNC(grub_list_push) (grub_list_t *head, grub_list_t item);
34
 
void EXPORT_FUNC(grub_list_remove) (grub_list_t *head, grub_list_t item);
 
35
void EXPORT_FUNC(grub_list_remove) (grub_list_t item);
35
36
 
36
37
#define FOR_LIST_ELEMENTS(var, list) for ((var) = (list); (var); (var) = (var)->next)
37
38
 
44
45
{
45
46
  grub_fatal ("error:%s:%u: bad type cast between incompatible grub types",
46
47
              file, line);
47
 
  return 0;
48
48
}
49
49
 
50
50
#define grub_bad_type_cast() grub_bad_type_cast_real(__LINE__, GRUB_FILE)
53
53
  ((char *) &(ptr)->field == (char *) &((type) (ptr))->field)
54
54
 
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 ())
58
58
 
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 ())
62
62
 
63
63
struct grub_named_list
64
64
{
65
65
  struct grub_named_list *next;
 
66
  struct grub_named_list **prev;
66
67
  char *name;
67
68
};
68
69
typedef struct grub_named_list *grub_named_list_t;
71
72
                                          const char *name);
72
73
 
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 ())
77
79
 
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 ())
82
 
 
83
 
#define GRUB_PRIO_LIST_PRIO_MASK        0xff
84
 
#define GRUB_PRIO_LIST_FLAG_ACTIVE      0x100
85
 
 
86
 
struct grub_prio_list
87
 
{
88
 
  struct grub_prio_list *next;
89
 
  char *name;
90
 
  int prio;
91
 
};
92
 
typedef struct grub_prio_list *grub_prio_list_t;
93
 
 
94
 
void EXPORT_FUNC(grub_prio_list_insert) (grub_prio_list_t *head,
95
 
                                         grub_prio_list_t item);
96
 
 
97
 
static inline void
98
 
grub_prio_list_remove (grub_prio_list_t *head, grub_prio_list_t item)
99
 
{
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));
103
 
}
104
 
 
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 ())
110
 
 
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 ())
116
85
 
117
86
#endif /* ! GRUB_LIST_HEADER */