1*1b481fc3SMaciej Żenczykowski #ifndef ETHTOOL_LIST_H__ 2*1b481fc3SMaciej Żenczykowski #define ETHTOOL_LIST_H__ 3*1b481fc3SMaciej Żenczykowski 4*1b481fc3SMaciej Żenczykowski #include <unistd.h> 5*1b481fc3SMaciej Żenczykowski 6*1b481fc3SMaciej Żenczykowski /* Generic list utilities */ 7*1b481fc3SMaciej Żenczykowski 8*1b481fc3SMaciej Żenczykowski struct list_head { 9*1b481fc3SMaciej Żenczykowski struct list_head *next, *prev; 10*1b481fc3SMaciej Żenczykowski }; 11*1b481fc3SMaciej Żenczykowski 12*1b481fc3SMaciej Żenczykowski #define LIST_HEAD_INIT(name) { &(name), &(name) } 13*1b481fc3SMaciej Żenczykowski list_add(struct list_head * new,struct list_head * head)14*1b481fc3SMaciej Żenczykowskistatic inline void list_add(struct list_head *new, struct list_head *head) 15*1b481fc3SMaciej Żenczykowski { 16*1b481fc3SMaciej Żenczykowski head->next->prev = new; 17*1b481fc3SMaciej Żenczykowski new->next = head->next; 18*1b481fc3SMaciej Żenczykowski new->prev = head; 19*1b481fc3SMaciej Żenczykowski head->next = new; 20*1b481fc3SMaciej Żenczykowski } 21*1b481fc3SMaciej Żenczykowski list_del(struct list_head * entry)22*1b481fc3SMaciej Żenczykowskistatic inline void list_del(struct list_head *entry) 23*1b481fc3SMaciej Żenczykowski { 24*1b481fc3SMaciej Żenczykowski entry->next->prev = entry->prev; 25*1b481fc3SMaciej Żenczykowski entry->prev->next = entry->next; 26*1b481fc3SMaciej Żenczykowski entry->next = NULL; 27*1b481fc3SMaciej Żenczykowski entry->prev = NULL; 28*1b481fc3SMaciej Żenczykowski } 29*1b481fc3SMaciej Żenczykowski 30*1b481fc3SMaciej Żenczykowski #define list_for_each_safe(pos, n, head) \ 31*1b481fc3SMaciej Żenczykowski for (pos = (head)->next, n = pos->next; pos != (head); \ 32*1b481fc3SMaciej Żenczykowski pos = n, n = pos->next) 33*1b481fc3SMaciej Żenczykowski 34*1b481fc3SMaciej Żenczykowski #endif 35