X-Git-Url: https://git.libre-soc.org/?a=blobdiff_plain;f=src%2Futil%2Flist.h;h=6edb750110973ed42d926a60e1cf55299236b546;hb=5ef5944848527c214a460cd746fcc467991c80c7;hp=f0dec5da60874c7cf9e6028589e9d1f03697816b;hpb=179fc4aae8f782453f0488e8dd508f9a01117376;p=mesa.git diff --git a/src/util/list.h b/src/util/list.h index f0dec5da608..6edb7501109 100644 --- a/src/util/list.h +++ b/src/util/list.h @@ -41,6 +41,7 @@ #include #include #include +#include "c99_compat.h" struct list_head @@ -71,12 +72,18 @@ static inline void list_addtail(struct list_head *item, struct list_head *list) list->prev = item; } +static inline bool list_empty(struct list_head *list); + static inline void list_replace(struct list_head *from, struct list_head *to) { - to->prev = from->prev; - to->next = from->next; - from->next->prev = to; - from->prev->next = to; + if (list_empty(from)) { + list_inithead(to); + } else { + to->prev = from->prev; + to->next = from->next; + from->next->prev = to; + from->prev->next = to; + } } static inline void list_del(struct list_head *item) @@ -104,7 +111,7 @@ static inline bool list_empty(struct list_head *list) */ static inline bool list_is_singular(const struct list_head *list) { - return list->next != NULL && list->next->next == list; + return list->next != NULL && list->next != list && list->next->next == list; } static inline unsigned list_length(struct list_head *list)