kconfig: split out useful helpers in confdata.c
[carl9170fw.git] / config / list.h
index b87206cc92f464650fad3a8ee4178ecfee6cf973..45cb237ab7ef7a9f17779647220da6a30afd06fc 100644 (file)
@@ -1,3 +1,4 @@
+/* SPDX-License-Identifier: GPL-2.0 */
 #ifndef LIST_H
 #define LIST_H
 
@@ -34,7 +35,7 @@ struct list_head {
  * list_entry - get the struct for this entry
  * @ptr:       the &struct list_head pointer.
  * @type:      the type of the struct this is embedded in.
- * @member:    the name of the list_struct within the struct.
+ * @member:    the name of the list_head within the struct.
  */
 #define list_entry(ptr, type, member) \
        container_of(ptr, type, member)
@@ -43,7 +44,7 @@ struct list_head {
  * list_for_each_entry -       iterate over list of given type
  * @pos:       the type * to use as a loop cursor.
  * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
+ * @member:    the name of the list_head within the struct.
  */
 #define list_for_each_entry(pos, head, member)                         \
        for (pos = list_entry((head)->next, typeof(*pos), member);      \
@@ -55,7 +56,7 @@ struct list_head {
  * @pos:       the type * to use as a loop cursor.
  * @n:         another type * to use as temporary storage
  * @head:      the head for your list.
- * @member:    the name of the list_struct within the struct.
+ * @member:    the name of the list_head within the struct.
  */
 #define list_for_each_entry_safe(pos, n, head, member)                 \
        for (pos = list_entry((head)->next, typeof(*pos), member),      \
@@ -101,4 +102,31 @@ static inline void list_add_tail(struct list_head *_new, struct list_head *head)
        __list_add(_new, head->prev, head);
 }
 
+/*
+ * Delete a list entry by making the prev/next entries
+ * point to each other.
+ *
+ * This is only for internal list manipulation where we know
+ * the prev/next entries already!
+ */
+static inline void __list_del(struct list_head *prev, struct list_head *next)
+{
+       next->prev = prev;
+       prev->next = next;
+}
+
+#define LIST_POISON1  ((void *) 0x00100100)
+#define LIST_POISON2  ((void *) 0x00200200)
+/**
+ * list_del - deletes entry from list.
+ * @entry: the element to delete from the list.
+ * Note: list_empty() on entry does not return true after this, the entry is
+ * in an undefined state.
+ */
+static inline void list_del(struct list_head *entry)
+{
+       __list_del(entry->prev, entry->next);
+       entry->next = (struct list_head*)LIST_POISON1;
+       entry->prev = (struct list_head*)LIST_POISON2;
+}
 #endif