struct list {
  struct list *next, *prev;
};

static inline void
list_init(struct list *list)
{
  list->next = list;
  list->prev = list;
}

static inline int
list_empty(struct list *list)
{
  return list->next == list;
}

static inline void
list_insert(struct list *link, struct list *new_link)
{
  new_link->prev       = link->prev;
  new_link->next       = link;
  new_link->prev->next = new_link;
  new_link->next->prev = new_link;
}

static inline void
list_append(struct list *list, struct list *new_link)
{
  list_insert((struct list *)list, new_link);
}

static inline void
list_prepend(struct list *list, struct list *new_link)
{
  list_insert(list->next, new_link);
}

static inline void
list_remove(struct list *link)
{
  link->prev->next = link->next;
  link->next->prev = link->prev;
}

#define list_entry(link, type, member) \
	((type *)((char *)(link)-(unsigned long)(&((type *)0)->member)))

#define list_head(list, type, member)		\
	list_entry((list)->next, type, member)

#define list_tail(list, type, member)		\
	list_entry((list)->prev, type, member)

#define list_next(elm, member)					\
	list_entry((elm)->member.next, typeof(*elm), member)

#define list_for_each_entry(pos, list, member)			\
	for (pos = list_head(list, typeof(*pos), member);	\
	     &pos->member != (list);				\
	     pos = list_next(pos, member))

