diff --git a/lib/datastruct/list.h b/lib/datastruct/list.h index cfda137ab..5f2e14c11 100644 --- a/lib/datastruct/list.h +++ b/lib/datastruct/list.h @@ -47,7 +47,10 @@ static inline int list_empty(struct list *head) { } #define list_iterate(v, head) \ - for (v = (head)->n; v != head; v = v->n) + for (v = (head)->n; v != head; v = v->n) + +#define list_iterate_safe(v, t, head) \ + for (v = (head)->n, t = v->n; v != head; v = t, t = v->n) static inline int list_size(struct list *head) { int s = 0; diff --git a/libdm/datastruct/list.h b/libdm/datastruct/list.h index cfda137ab..5f2e14c11 100644 --- a/libdm/datastruct/list.h +++ b/libdm/datastruct/list.h @@ -47,7 +47,10 @@ static inline int list_empty(struct list *head) { } #define list_iterate(v, head) \ - for (v = (head)->n; v != head; v = v->n) + for (v = (head)->n; v != head; v = v->n) + +#define list_iterate_safe(v, t, head) \ + for (v = (head)->n, t = v->n; v != head; v = t, t = v->n) static inline int list_size(struct list *head) { int s = 0;