X-Git-Url: https://git.saurik.com/redis.git/blobdiff_plain/c7df85a484f6526a00f9748490600a227587b3c3..4774a53b:/adlist.c?ds=inline diff --git a/adlist.c b/adlist.c index 15b2617c..015012f5 100644 --- a/adlist.c +++ b/adlist.c @@ -1,6 +1,6 @@ /* adlist.c - A generic doubly linked list implementation * - * Copyright (c) 2006-2009, Salvatore Sanfilippo + * Copyright (c) 2006-2010, Salvatore Sanfilippo * All rights reserved. * * Redistribution and use in source and binary forms, with or without @@ -123,6 +123,35 @@ list *listAddNodeTail(list *list, void *value) return list; } +list *listInsertNode(list *list, listNode *old_node, void *value, int after) { + listNode *node; + + if ((node = zmalloc(sizeof(*node))) == NULL) + return NULL; + node->value = value; + if (after) { + node->prev = old_node; + node->next = old_node->next; + if (list->tail == old_node) { + list->tail = node; + } + } else { + node->next = old_node; + node->prev = old_node->prev; + if (list->head == old_node) { + list->head = node; + } + } + if (node->prev != NULL) { + node->prev->next = node; + } + if (node->next != NULL) { + node->next->prev = node; + } + list->len++; + return list; +} + /* Remove the specified node from the specified list. * It's up to the caller to free the private value of the node. * @@ -183,9 +212,9 @@ void listRewindTail(list *list, listIter *li) { * or NULL if there are no more elements, so the classical usage patter * is: * - * iter = listGetItarotr(list,); - * while ((node = listNextIterator(iter)) != NULL) { - * DoSomethingWith(listNodeValue(node)); + * iter = listGetIterator(list,); + * while ((node = listNext(iter)) != NULL) { + * doSomethingWith(listNodeValue(node)); * } * * */