155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak/* 355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak * Simple list implementation mostly take from the Linux Kernel 455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak */ 555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include <stdlib.h> 755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak#include "list.h" 855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid INIT_LIST_HEAD(struct list_head *list) 1055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 1155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak list->next = list; 1255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak list->prev = list; 1355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} 1455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 1555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid __list_add(struct list_head *new, 16354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gao struct list_head *prev, struct list_head *next) 1755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 1855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak next->prev = new; 1955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak new->next = next; 2055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak new->prev = prev; 2155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak prev->next = new; 2255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} 2355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 2455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid __list_del(struct list_head *prev, struct list_head *next) 2555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 2655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak next->prev = prev; 2755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak prev->next = next; 2855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} 2955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_add(struct list_head *new, struct list_head *head) 3155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 3255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak __list_add(new, head, head->next); 3355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} 3455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 3555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_add_tail(struct list_head *new, struct list_head *head) 3655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 3755d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak __list_add(new, head->prev, head); 3855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} 3955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 4055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modakvoid list_del(struct list_head *entry) 4155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 4255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak __list_del(entry->prev, entry->next); 4355d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak entry->next = NULL; 4455d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak entry->prev = NULL; 4555d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak} 4655d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak 47354ebb48db8e66a853a58379a4808d5dcd1ceac3Wanlong Gaovoid list_replace(struct list_head *old, struct list_head *new) 4855d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak{ 4955d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak new->next = old->next; 5055d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak new->next->prev = new; 5155d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak new->prev = old->prev; 5255d04e4a11434fcdb0435b7fd0f8b1daf38bf3c4subrata_modak new->prev->next = new; 53ec6edca7aa42b6affd989ef91b5897f96795e40fChris Dearman} 54