Commit 175389c8 authored by Stefano Sabatini's avatar Stefano Sabatini Committed by Anton Khirnov

avio: add avio_check()

The new function is more flexible than url_exist(), as it allows to
specify which access flags to check, and does not require an explicit
open of the checked resource.
Signed-off-by: default avatarAnton Khirnov <anton@khirnov.net>
parent cbea3ac8
......@@ -374,6 +374,25 @@ int url_exist(const char *filename)
return 1;
}
int avio_check(const char *url, int flags)
{
URLContext *h;
int ret = ffurl_alloc(&h, url, flags);
if (ret)
return ret;
if (h->prot->url_check) {
ret = h->prot->url_check(h, flags);
} else {
ret = ffurl_connect(h);
if (ret >= 0)
ret = flags;
}
ffurl_close(h);
return ret;
}
int64_t ffurl_size(URLContext *h)
{
int64_t pos, size;
......
......@@ -134,6 +134,7 @@ typedef struct URLProtocol {
int priv_data_size;
const AVClass *priv_data_class;
int flags;
int (*url_check)(URLContext *h, int mask);
} URLProtocol;
typedef struct URLPollEntry {
......@@ -346,6 +347,23 @@ attribute_deprecated int url_close_buf(AVIOContext *s);
*/
int url_exist(const char *url);
/**
* Return AVIO_* access flags corresponding to the access permissions
* of the resource in url, or a negative value corresponding to an
* AVERROR code in case of failure. The returned access flags are
* masked by the value in flags.
*
* @note This function is intrinsically unsafe, in the sense that the
* checked resource may change its existence or permission status from
* one call to another. Thus you should not trust the returned value,
* unless you are sure that no other processes are accessing the
* checked resource.
*
* @note This function is slightly broken until next major bump
* because of AVIO_RDONLY == 0. Don't use it until then.
*/
int avio_check(const char *url, int flags);
/**
* The callback is called in blocking functions to test regulary if
* asynchronous interruption is needed. AVERROR_EXIT is returned
......
......@@ -59,6 +59,7 @@ typedef struct URLProtocol {
int priv_data_size;
const AVClass *priv_data_class;
int flags;
int (*url_check)(URLContext *h, int mask);
} URLProtocol;
#endif
......
Markdown is supported
0% or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment