-\r
-/*\r
- * This is a simple doubly linked list implementation that matches the \r
- * way the Linux kernel doubly linked list implementation works.\r
- */\r
-\r
-struct ylist_head {
- struct ylist_head *next; /* next in chain */
- struct ylist_head *prev; /* previous in chain */
-};\r
-\r
-\r
-/* Initialise a list head to an empty list */\r
-#define YINIT_LIST_HEAD(p) \
-do { \\r
- (p)->next = (p);\\r
- (p)->prev = (p); \
-} while(0)\r
-\r
-\r
-/* Add an element to a list */\r
-static __inline__ void ylist_add(struct ylist_head *newEntry,
- struct ylist_head *list)
-{\r
- struct ylist_head *listNext = list->next;
- \r
- list->next = newEntry;\r
- newEntry->prev = list;\r
- newEntry->next = listNext;
- listNext->prev = newEntry;
-
-}
-
-\r
-/* Take an element out of its current list, with or without\r
- * reinitialising the links.of the entry*/\r
-static __inline__ void ylist_del(struct ylist_head *entry)
-{\r
- struct ylist_head *listNext = entry->next;
- struct ylist_head *listPrev = entry->prev;
- \r
- listNext->prev = listPrev;\r
- listPrev->next = listNext;\r
- \r
-}\r
-\r
-static __inline__ void ylist_del_init(struct ylist_head *entry)
-{\r
- ylist_del(entry);
- entry->next = entry->prev = entry;\r
-}\r
-\r
-\r
-/* Test if the list is empty */\r
-static __inline__ int ylist_empty(struct ylist_head *entry)
-{\r
- return (entry->next == entry);\r
-}\r
-\r
-\r
-/* ylist_entry takes a pointer to a list entry and offsets it to that
- * we can find a pointer to the object it is embedded in.\r
- */\r
- \r
- \r
-#define ylist_entry(entry, type, member) \
- ((type *)((char *)(entry)-(unsigned long)(&((type *)NULL)->member)))\r
-\r
-\r
-/* ylist_for_each and list_for_each_safe iterate over lists.
- * ylist_for_each_safe uses temporary storage to make the list delete safe
- */\r
-\r
-#define ylist_for_each(itervar, list) \
- for (itervar = (list)->next; itervar != (list); itervar = itervar->next )\r
-\r
-#define ylist_for_each_safe(itervar,saveVar, list) \
- for (itervar = (list)->next, saveVar = (list)->next->next; itervar != (list); \\r
- itervar = saveVar, saveVar = saveVar->next)\r
-\r