]>
git.proxmox.com Git - mirror_frr.git/blob - ospf6d/ospf6_linklist.c
8c17935923120cc7de63777e4df117d48712bed0
4 #include "ospf6_linklist.h"
6 static struct linklist_node
*
7 linklist_lookup_node (void *data
, struct linklist
*linklist
)
9 struct linklist_node
*node
;
11 for (node
= linklist
->head
; node
; node
= node
->next
)
13 if (linklist
->cmp
&& (*linklist
->cmp
) (node
->data
, data
) == 0)
15 if (node
->data
== data
)
23 linklist_lookup (void *data
, struct linklist
*linklist
)
25 struct linklist_node
*node
;
27 node
= linklist_lookup_node (data
, linklist
);
34 linklist_add (void *data
, struct linklist
*linklist
)
36 struct linklist_node
*node
= NULL
, *add
;
38 if (linklist_lookup_node (data
, linklist
))
41 add
= malloc (sizeof (struct linklist_node
));
44 memset (add
, 0, sizeof (struct linklist_node
));
49 for (node
= linklist
->head
; node
; node
= node
->next
)
51 if ((*linklist
->cmp
) (node
->data
, add
->data
) > 0)
61 linklist
->tail
->next
= add
;
62 add
->prev
= linklist
->tail
;
75 /* insert just before 'node' */
78 node
->prev
->next
= add
;
79 add
->prev
= node
->prev
;
96 linklist_remove (void *data
, struct linklist
*linklist
)
98 struct linklist_node
*rem
;
100 rem
= linklist_lookup_node (data
, linklist
);
105 rem
->prev
->next
= rem
->next
;
107 linklist
->head
= rem
->next
;
110 rem
->next
->prev
= rem
->prev
;
112 linklist
->tail
= rem
->prev
;
120 linklist_head (struct linklist
*linklist
, struct linklist_node
*node
)
122 if (linklist
->head
== NULL
)
130 node
->prev
= linklist
->head
->prev
;
131 node
->next
= linklist
->head
->next
;
132 node
->data
= linklist
->head
->data
;
136 linklist_end (struct linklist_node
*node
)
138 if (node
->data
== NULL
&& node
->next
== NULL
)
144 linklist_next (struct linklist_node
*node
)
146 if (node
->next
== NULL
)
154 node
->data
= node
->next
->data
;
155 node
->prev
= node
->next
->prev
;
156 node
->next
= node
->next
->next
;
162 struct linklist
*linklist
;
164 linklist
= malloc (sizeof (struct linklist
));
165 if (linklist
== NULL
)
167 memset (linklist
, 0, sizeof (struct linklist
));
173 linklist_remove_all (struct linklist
*linklist
)
175 struct linklist_node node
;
177 for (linklist_head (linklist
, &node
); ! linklist_end (&node
);
178 linklist_next (&node
))
179 linklist_remove (node
.data
, linklist
);
183 linklist_delete (struct linklist
*linklist
)
185 linklist_remove_all (linklist
);
186 assert (linklist
->count
== 0);
187 assert (linklist
->head
== NULL
);
188 assert (linklist
->tail
== NULL
);