static inline void list_add(struct list_head *new, struct list_head *head)
{
__list_add(new, head, head->next);
}
new: 要加入的新 entry
head: 原本的 list 的 head
static inline void list_add_tail(struct list_head *new, struct list_head *head)
{
__list_add(new, head->prev, head);
}
static inline void list_del(struct list_head *entry)
{
__list_del_entry(entry);
entry->next = LIST_POISON1;
entry->prev = LIST_POISON2;
}
將 entry 移除。比起 delete 比較像 remove (因為沒有把 entry node 的記憶體釋放)
list_del_init: 有重新對 entry node 做 initialize
static inline void list_replace(struct list_head *old,
struct list_head *new)
{
new->next = old->next;
new->next->prev = new;
new->prev = old->prev;
new->prev->next = new;
}
將 old 的 node 移除,以 new 的 node 取而代之。
list_replace_init: 對 old node 進行 initialize
static inline void list_swap(struct list_head *entry1,
struct list_head *entry2)
{
struct list_head *pos = entry2->prev;
list_del(entry2);
list_replace(entry1, entry2);
if (pos == entry1)
pos = entry2;
list_add(entry1, pos);
}
將 entry1 和 entry2 的位置互換。