Comprehensive C Archive Network

Upload Code Download Code About

Browse Source Download (without any required ccan dependencies)

Module:

ccan/list

Summary:

double linked list routines

Dependencies:

 ccan/container_of  

Description:

The list header contains routines for manipulating double linked lists. It defines two types: struct list_head used for anchoring lists, and struct list_node which is usually embedded in the structure which is placed in the list.

Example:

	#include <err.h>
	#include <stdio.h>
	#include <stdlib.h>
	#include <ccan/list/list.h>

	struct parent {
		const char *name;
		struct list_head children;
		unsigned int num_children;
	};

	struct child {
		const char *name;
		struct list_node list;
	};

	int main(int argc, char *argv[])
	{
		struct parent p;
		struct child *c;
		unsigned int i;

		if (argc < 2)
			errx(1, "Usage: %s parent children...", argv[0]);

		p.name = argv[1];
		list_head_init(&p.children);
		for (i = 2; i < argc; i++) {
			c = malloc(sizeof(*c));
			c->name = argv[i];
			list_add(&p.children, &c->list);
			p.num_children++;
		}

		printf("%s has %u children:", p.name, p.num_children);
		list_for_each(&p.children, c, list)
			printf("%s ", c->name);
		printf("\n");
		return 0;
	}

Licence:

LGPL (2 or any later version)