On Thu, Mar 26, 2015 at 01:25:17AM +0100, Mariusz Szczepańczyk wrote: > From: Lukasz Marek <lukasz.m.lu...@gmail.com> > > API allows protocol implementations to provide API that > allows to list directory content. > API is similar to POSIX opendir/readdir/closedir. > --- > libavformat/avio.c | 74 +++++++++++++++++++++++++++++++++++++++++++++++ > libavformat/avio.h | 84 > +++++++++++++++++++++++++++++++++++++++++++++++++++++- > libavformat/url.c | 16 +++++++++++ > libavformat/url.h | 10 +++++++ > 4 files changed, 183 insertions(+), 1 deletion(-) > > diff --git a/libavformat/avio.c b/libavformat/avio.c > index 4896782..51419cc 100644 > --- a/libavformat/avio.c > +++ b/libavformat/avio.c > @@ -23,6 +23,7 @@ > #include "libavutil/dict.h" > #include "libavutil/opt.h" > #include "libavutil/time.h" > +#include "libavutil/avassert.h" > #include "os_support.h" > #include "avformat.h" > #if CONFIG_NETWORK > @@ -418,6 +419,79 @@ int avio_check(const char *url, int flags) > return ret; > } > > +int avio_open_dir(AVIODirContext **s, const char *url, AVDictionary > **options) > +{ > + URLContext *h = NULL; > + AVIODirContext *ctx = NULL; > + int ret; > + av_assert0(s); > + > + ctx = av_mallocz(sizeof(*ctx)); > + if (!ctx) { > + ret = AVERROR(ENOMEM); > + goto fail; > + } > + > + if ((ret = ffurl_alloc(&h, url, AVIO_FLAG_READ, NULL)) < 0) > + goto fail; > + > + if (h->prot->url_open_dir && h->prot->url_read_dir && > h->prot->url_close_dir) { > + if (options && h->prot->priv_data_class && > + (ret = av_opt_set_dict(h->priv_data, options)) < 0) > + goto fail; > + ret = h->prot->url_open_dir(h); > + } else > + ret = AVERROR(ENOSYS); > + if (ret < 0) > + goto fail; > + > + ctx->url_context = h; > + *s = ctx; > + return 0; > + > + fail: > + av_free(ctx); > + *s = NULL; > + ffurl_close(h); > + return ret; > +} > +
> +int avio_read_dir(AVIODirContext *s, AVIODirEntry **next) > +{ > + URLContext *h; > + int ret; > + > + if (!s || !s->url_context) > + return EINVAL; i assume this is intended to be AVERROR(EINVAL) > + h = s->url_context; > + if ((ret = h->prot->url_read_dir(h, next)) < 0) > + avio_free_directory_entry(next); > + return ret; > +} > + > +int avio_close_dir(AVIODirContext **s) > +{ > + URLContext *h; > + > + av_assert0(s); > + if (!(*s) || !(*s)->url_context) > + return EINVAL; same as previous [...] -- Michael GnuPG fingerprint: 9FF2128B147EF6730BADF133611EC787040B0FAB Freedom in capitalist society always remains about the same as it was in ancient Greek republics: Freedom for slave owners. -- Vladimir Lenin
signature.asc
Description: Digital signature
_______________________________________________ ffmpeg-devel mailing list ffmpeg-devel@ffmpeg.org http://ffmpeg.org/mailman/listinfo/ffmpeg-devel