diff --git a/include/libwebsockets/lws-misc.h b/include/libwebsockets/lws-misc.h index 00bf4d6aa..823c240bd 100644 --- a/include/libwebsockets/lws-misc.h +++ b/include/libwebsockets/lws-misc.h @@ -187,6 +187,11 @@ lws_dll_add_front(struct lws_dll *d, struct lws_dll *phead); LWS_VISIBLE LWS_EXTERN void lws_dll_remove(struct lws_dll *d); +/* another way to do lws_start_foreach_dll_safe() on a list via a cb */ + +LWS_VISIBLE LWS_EXTERN int +lws_dll_foreach_safe(struct lws_dll *phead, int (*cb)(struct lws_dll *d)); + struct lws_dll_lws { /* typed as struct lws * */ struct lws_dll_lws *prev; struct lws_dll_lws *next; diff --git a/lib/core/libwebsockets.c b/lib/core/libwebsockets.c index ae10e5a8f..40b64d708 100644 --- a/lib/core/libwebsockets.c +++ b/lib/core/libwebsockets.c @@ -138,6 +138,17 @@ lws_dll_remove(struct lws_dll *d) d->next = NULL; } +int +lws_dll_foreach_safe(struct lws_dll *phead, int (*cb)(struct lws_dll *d)) +{ + lws_start_foreach_dll_safe(struct lws_dll *, p, tp, phead->next) { + if (cb(p)) + return 1; + } lws_end_foreach_dll_safe(p, tp); + + return 0; +} + #if !(defined(LWS_PLAT_OPTEE) && !defined(LWS_WITH_NETWORK)) LWS_VISIBLE lws_usec_t