aboutsummaryrefslogtreecommitdiffstats
path: root/libavformat/protocols.c
diff options
context:
space:
mode:
authorAnton Khirnov <anton@khirnov.net>2021-11-25 15:40:16 +0100
committerAnton Khirnov <anton@khirnov.net>2021-12-07 11:16:14 +0100
commit6ebaccf327ce0fd88555fdd8b3f3deb019f0dc98 (patch)
tree467156211c85985fc64ef5d6a189ec642071f73d /libavformat/protocols.c
parentc0e46ad9a97628b7af78c21c4628f878ca658184 (diff)
downloadffmpeg-6ebaccf327ce0fd88555fdd8b3f3deb019f0dc98.tar.gz
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.
Diffstat (limited to 'libavformat/protocols.c')
-rw-r--r--libavformat/protocols.c18
1 files 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)