From 6ebaccf327ce0fd88555fdd8b3f3deb019f0dc98 Mon Sep 17 00:00:00 2001 From: Anton Khirnov Date: Thu, 25 Nov 2021 15:40:16 +0100 Subject: [PATCH] lavf/protocols: avoid discarding const in avio_enum_protocols() Instead of storing the protocol pointer in the opaque iteration state, store just the index of the next protocol, similarly to how ff_urlcontext_child_class_iterate() works. --- libavformat/protocols.c | 18 +++++++++--------- 1 file changed, 9 insertions(+), 9 deletions(-) diff --git a/libavformat/protocols.c b/libavformat/protocols.c index b108aa6c7e..948fae411f 100644 --- a/libavformat/protocols.c +++ b/libavformat/protocols.c @@ -93,17 +93,17 @@ const AVClass *ff_urlcontext_child_class_iterate(void **iter) const char *avio_enum_protocols(void **opaque, int output) { - const URLProtocol **p = *opaque; + uintptr_t i; - p = p ? p + 1 : url_protocols; - *opaque = p; - if (!*p) { - *opaque = NULL; - return NULL; + for (i = (uintptr_t)*opaque; url_protocols[i]; i++) { + const URLProtocol *p = url_protocols[i]; + if ((output && p->url_write) || (!output && p->url_read)) { + *opaque = (void*)(uintptr_t)(i + 1); + return p->name; + } } - if ((output && (*p)->url_write) || (!output && (*p)->url_read)) - return (*p)->name; - return avio_enum_protocols(opaque, output); + *opaque = NULL; + return NULL; } const AVClass *avio_protocol_get_class(const char *name)