$darkmode
netatalk  4.5.1
Free and Open Source Apple Filing Protocol (AFP) Server
include/atalk/list.h File Reference

Simple doubly linked list implementation. More...

Go to the source code of this file.

Data Structures

struct  list_head
 

Macros

#define ATALK_LIST_HEAD_INIT(name)   { &(name), &(name) }
 
#define ATALK_LIST_HEAD(name)    struct list_head name = ATALK_LIST_HEAD_INIT(name)
 
#define ATALK_INIT_LIST_HEAD(ptr)
 
#define list_entry(ptr, type, member)    ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))
 get the struct for this entry More...
 
#define list_for_each(pos, head)
 iterate over a list More...
 
#define list_for_each_prev(pos, head)
 iterate over a list in reverse order More...
 

Detailed Description

Simple doubly linked list implementation.

Some of the internal functions ("__xxx") are useful when manipulating whole lists rather than single entries, as sometimes we already know the next/prev entries and we can generate better code by using them directly rather than using the generic single-entry routines.

Macro Definition Documentation

◆ ATALK_INIT_LIST_HEAD

#define ATALK_INIT_LIST_HEAD (   ptr)
Value:
do { \
(ptr)->next = (ptr); (ptr)->prev = (ptr); \
} while (0)
#define next
Definition: hash.c:36

◆ ATALK_LIST_HEAD

#define ATALK_LIST_HEAD (   name)     struct list_head name = ATALK_LIST_HEAD_INIT(name)

◆ ATALK_LIST_HEAD_INIT

#define ATALK_LIST_HEAD_INIT (   name)    { &(name), &(name) }

◆ list_entry

#define list_entry (   ptr,
  type,
  member 
)     ((type *)((char *)(ptr)-(unsigned long)(&((type *)0)->member)))

get the struct for this entry

Parameters
ptrthe &struct list_head pointer.
typethe type of the struct this is embedded in.
memberthe name of the list_struct within the struct.

◆ list_for_each

#define list_for_each (   pos,
  head 
)
Value:
for (pos = (head)->next; pos != (head); \
pos = pos->next)

iterate over a list

Parameters
posthe &struct list_head to use as a loop counter.
headthe head for your list.

◆ list_for_each_prev

#define list_for_each_prev (   pos,
  head 
)
Value:
for (pos = (head)->prev; pos != (head); \
pos = pos->prev)

iterate over a list in reverse order

Parameters
posthe &struct list_head to use as a loop counter.
headthe head for your list.