]> git.dujemihanovic.xyz Git - linux.git/commitdiff
scripts: import more list macros
authorSami Tolvanen <samitolvanen@google.com>
Mon, 23 Sep 2024 18:18:47 +0000 (18:18 +0000)
committerMasahiro Yamada <masahiroy@kernel.org>
Sun, 6 Oct 2024 17:12:27 +0000 (02:12 +0900)
Import list_is_first, list_is_last, list_replace, and list_replace_init.

Signed-off-by: Sami Tolvanen <samitolvanen@google.com>
Signed-off-by: Masahiro Yamada <masahiroy@kernel.org>
scripts/include/list.h

index fea1e2b7906369644b605348f7b4ed356edf87c7..8bdcaadca709d2a83cf55e756aba0de87a870b29 100644 (file)
@@ -127,6 +127,36 @@ static inline void list_del(struct list_head *entry)
        entry->prev = LIST_POISON2;
 }
 
+/**
+ * list_replace - replace old entry by new one
+ * @old : the element to be replaced
+ * @new : the new element to insert
+ *
+ * If @old was empty, it will be overwritten.
+ */
+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;
+}
+
+/**
+ * list_replace_init - replace old entry by new one and initialize the old one
+ * @old : the element to be replaced
+ * @new : the new element to insert
+ *
+ * If @old was empty, it will be overwritten.
+ */
+static inline void list_replace_init(struct list_head *old,
+                                    struct list_head *new)
+{
+       list_replace(old, new);
+       INIT_LIST_HEAD(old);
+}
+
 /**
  * list_move - delete from one list and add as another's head
  * @list: the entry to move
@@ -150,6 +180,26 @@ static inline void list_move_tail(struct list_head *list,
        list_add_tail(list, head);
 }
 
+/**
+ * list_is_first -- tests whether @list is the first entry in list @head
+ * @list: the entry to test
+ * @head: the head of the list
+ */
+static inline int list_is_first(const struct list_head *list, const struct list_head *head)
+{
+       return list->prev == head;
+}
+
+/**
+ * list_is_last - tests whether @list is the last entry in list @head
+ * @list: the entry to test
+ * @head: the head of the list
+ */
+static inline int list_is_last(const struct list_head *list, const struct list_head *head)
+{
+       return list->next == head;
+}
+
 /**
  * list_is_head - tests whether @list is the list @head
  * @list: the entry to test