• Home
  • History
  • Annotate
  • Line#
  • Navigate
  • Raw
  • Download
  • only in /asuswrt-rt-n18u-9.0.0.4.380.2695/release/src-rt-6.x.4708/router/busybox/e2fsprogs/old_e2fsprogs/blkid/
1/* vi: set sw=4 ts=4: */
2
3#include "list.h"
4
5/*
6 * Insert a new entry between two known consecutive entries.
7 *
8 * This is only for internal list manipulation where we know
9 * the prev/next entries already!
10 */
11void __list_add(struct list_head * add,
12	struct list_head * prev,
13	struct list_head * next)
14{
15	next->prev = add;
16	add->next = next;
17	add->prev = prev;
18	prev->next = add;
19}
20
21/*
22 * list_add - add a new entry
23 * @add:	new entry to be added
24 * @head:	list head to add it after
25 *
26 * Insert a new entry after the specified head.
27 * This is good for implementing stacks.
28 */
29void list_add(struct list_head *add, struct list_head *head)
30{
31	__list_add(add, head, head->next);
32}
33
34/*
35 * list_add_tail - add a new entry
36 * @add:	new entry to be added
37 * @head:	list head to add it before
38 *
39 * Insert a new entry before the specified head.
40 * This is useful for implementing queues.
41 */
42void list_add_tail(struct list_head *add, struct list_head *head)
43{
44	__list_add(add, head->prev, head);
45}
46
47/*
48 * Delete a list entry by making the prev/next entries
49 * point to each other.
50 *
51 * This is only for internal list manipulation where we know
52 * the prev/next entries already!
53 */
54void __list_del(struct list_head * prev, struct list_head * next)
55{
56	next->prev = prev;
57	prev->next = next;
58}
59
60/*
61 * list_del - deletes entry from list.
62 * @entry:	the element to delete from the list.
63 *
64 * list_empty() on @entry does not return true after this, @entry is
65 * in an undefined state.
66 */
67void list_del(struct list_head *entry)
68{
69	__list_del(entry->prev, entry->next);
70}
71
72/*
73 * list_del_init - deletes entry from list and reinitialize it.
74 * @entry:	the element to delete from the list.
75 */
76void list_del_init(struct list_head *entry)
77{
78	__list_del(entry->prev, entry->next);
79	INIT_LIST_HEAD(entry);
80}
81
82/*
83 * list_empty - tests whether a list is empty
84 * @head:	the list to test.
85 */
86int list_empty(struct list_head *head)
87{
88	return head->next == head;
89}
90
91/*
92 * list_splice - join two lists
93 * @list:	the new list to add.
94 * @head:	the place to add it in the first list.
95 */
96void list_splice(struct list_head *list, struct list_head *head)
97{
98	struct list_head *first = list->next;
99
100	if (first != list) {
101		struct list_head *last = list->prev;
102		struct list_head *at = head->next;
103
104		first->prev = head;
105		head->next = first;
106
107		last->next = at;
108		at->prev = last;
109	}
110}
111