@@ -220,112 +220,4 @@ static inline void list_splice_init(struct list_head *list,
220220 &pos->member != (head); \
221221 pos = list_entry(pos->member.next, typeof (*pos), member))
222222
223- /*
224- * Singly linked list implementation.
225- */
226-
227- struct slist_node {
228- struct slist_node * next ;
229- };
230-
231- struct slist_head {
232- struct slist_node first , * last ;
233- };
234-
235- #define SLIST_HEAD_INIT (name ) { { (struct slist_node *)0 }, &(name).first }
236-
237- #define SLIST_HEAD (name ) \
238- struct slist_head name = SLIST_HEAD_INIT(name)
239-
240- static inline void INIT_SLIST_HEAD (struct slist_head * list )
241- {
242- list -> first .next = (struct slist_node * )0 ;
243- list -> last = & list -> first ;
244- }
245-
246- static inline void slist_add_after (struct slist_node * entry ,
247- struct slist_node * prev ,
248- struct slist_head * list )
249- {
250- entry -> next = prev -> next ;
251- prev -> next = entry ;
252- if (!entry -> next )
253- list -> last = entry ;
254- }
255-
256- static inline void slist_add_head (struct slist_node * entry ,
257- struct slist_head * list )
258- {
259- slist_add_after (entry , & list -> first , list );
260- }
261-
262- static inline void slist_add_tail (struct slist_node * entry ,
263- struct slist_head * list )
264- {
265- entry -> next = (struct slist_node * )0 ;
266- list -> last -> next = entry ;
267- list -> last = entry ;
268- }
269-
270- static inline void slist_del_after (struct slist_node * prev ,
271- struct slist_head * list )
272- {
273- prev -> next = prev -> next -> next ;
274- if (!prev -> next )
275- list -> last = prev ;
276- }
277-
278- static inline void slist_del_head (struct slist_head * list )
279- {
280- slist_del_after (& list -> first , list );
281- }
282-
283- static inline int slist_empty (const struct slist_head * list )
284- {
285- return !list -> first .next ;
286- }
287-
288- static inline void __slist_splice (const struct slist_head * list ,
289- struct slist_node * prev ,
290- struct slist_head * head )
291- {
292- list -> last -> next = prev -> next ;
293- prev -> next = list -> first .next ;
294- if (!list -> last -> next )
295- head -> last = list -> last ;
296- }
297-
298- static inline void slist_splice (const struct slist_head * list ,
299- struct slist_node * prev ,
300- struct slist_head * head )
301- {
302- if (!slist_empty (list ))
303- __slist_splice (list , prev , head );
304- }
305-
306- static inline void slist_splice_init (struct slist_head * list ,
307- struct slist_node * prev ,
308- struct slist_head * head )
309- {
310- if (!slist_empty (list )) {
311- __slist_splice (list , prev , head );
312- INIT_SLIST_HEAD (list );
313- }
314- }
315-
316- #define slist_entry (ptr , type , member ) \
317- ((type *)((char *)(ptr)-(size_t)(&((type *)0)->member)))
318-
319- #define slist_for_each (pos , head ) \
320- for (pos = (head)->first.next; pos; pos = pos->next)
321-
322- #define slist_for_each_safe (pos , prev , head ) \
323- for (prev = &(head)->first, pos = prev->next; pos; \
324- prev = prev->next == pos ? pos : prev, pos = prev->next)
325-
326- #define slist_for_each_entry (pos , head , member ) \
327- for (pos = slist_entry((head)->first.next, typeof (*pos), member); \
328- &pos->member != (struct slist_node *)0; \
329- pos = slist_entry(pos->member.next, typeof (*pos), member))
330-
331223#endif
0 commit comments