]> wimlib.net Git - wimlib/blobdiff - src/list.h
finish_write(): Reorganize
[wimlib] / src / list.h
index ce2dad2c495d55910a935d4c27b0abba2cb5949a..889097b5acf36521157178f9d1e0995fce306bcc 100644 (file)
@@ -119,6 +119,44 @@ static inline int list_empty(const struct list_head *head)
        return head->next == head;
 }
 
+static inline void __list_splice(const struct list_head *list,
+                                struct list_head *prev,
+                                struct list_head *next)
+{
+       struct list_head *first = list->next;
+       struct list_head *last = list->prev;
+
+       first->prev = prev;
+       prev->next = first;
+
+       last->next = next;
+       next->prev = last;
+}
+
+/**
+ * list_splice - join two lists, this is designed for stacks
+ * @list: the new list to add.
+ * @head: the place to add it in the first list.
+ */
+static inline void list_splice(const struct list_head *list,
+                               struct list_head *head)
+{
+       if (!list_empty(list))
+               __list_splice(list, head, head->next);
+}
+
+/**
+ * list_splice_tail - join two lists, each list being a queue
+ * @list: the new list to add.
+ * @head: the place to add it in the first list.
+ */
+static inline void list_splice_tail(struct list_head *list,
+                               struct list_head *head)
+{
+       if (!list_empty(list))
+               __list_splice(list, head->prev, head);
+}
+
 /**
  * list_entry - get the struct for this entry
  * @ptr:       the &struct list_head pointer.
@@ -195,16 +233,6 @@ static inline void hlist_del(struct hlist_node *n)
                next->pprev = pprev;
 }
 
-static inline void hlist_safe_del(struct hlist_node *n)
-{
-       struct hlist_node *next = n->next;
-       struct hlist_node **pprev = n->pprev;
-       if (pprev)
-               *pprev = next;
-       if (next)
-               next->pprev = pprev;
-}
-
 static inline void hlist_add_head(struct hlist_node *n, struct hlist_head *h)
 {
        struct hlist_node *first = h->first;