---
name: "libinn_list"
section: "3"
platform: "linux"
package: "inn"
version: "2.7.4-4"
release: "Arch Linux 2026-11-01"
platforms: ["linux"]
url: "https://new.carta.tech/libinn_list"
---

# libinn\_list(3)

list routines

## NAME

list - list routines

## SYNOPSIS

```
    #include <inn/list.h>
    struct node {
        struct node *succ;
        struct node *pred;
    };
    struct list {
        struct node *head;
        struct node *tail;
        struct node *tailpred;
    };
    void list_new(struct list *list);
    struct node *list_addhead(struct list *list, struct node *node);
    struct node *list_addtail(struct list *list, struct node *node);
    struct node *list_head(struct list *list);
    struct node *list_tail(struct list *list);
    struct node *list_succ(struct node *node);
    struct node *list_pred(struct node *node);
    struct node *list_remhead(struct list *list);
    struct node *list_remtail(struct list *list);
    struct node *list_remove(struct node *node);
    struct node *list_insert(struct list *list, struct node *node,
                             struct node *pred);
    bool list_isempty(struct list *list);
```

## DESCRIPTION

**list\_new** initialises the list header *list* so as to create an empty list.

**list\_addhead** adds *node* to the head of *list*, returning the node just added.

**list\_addtail** adds *node* to the tail of *list*, returning the node just added.

**list\_head** returns a pointer to the node at the head of *list* or **NULL** if the list is empty.

**list\_tail** returns a pointer to the node at the tail of *list* or **NULL** if the list is empty.

**list\_succ** returns the next (successor) node on the list after *node* or **NULL** if *node* was the final node.

**list\_pred** returns the previous (predecessor) node on the list before *node* or **NULL** if *node* was the first node.

**list\_remhead** removes the first node from *list* and returns it to the caller.  If the list is empty **NULL** is returned.

**list\_remtail** removes the last node from *list* and returns it to the caller.  If the list is empty **NULL** is returned.

**list\_remove** removes *node* from the list it is on and returns it to the caller.

**list\_insert** inserts *node* onto *list* after the node *pred*.  If *pred* is **NULL** then *node* is added to the head of *list*.

## HISTORY

Written by Alex Kiernan \<alex.kiernan@thus.net\> for InterNetNews 2.4.0.
