forked from FFmpeg/FFmpeg
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: Anton Khirnov <anton@khirnov.net>
This commit is contained in:
parent
cbea3ac820
commit
175389c854
3 changed files with 38 additions and 0 deletions
|
@ -374,6 +374,25 @@ int url_exist(const char *filename)
|
||||||
return 1;
|
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 ffurl_size(URLContext *h)
|
||||||
{
|
{
|
||||||
int64_t pos, size;
|
int64_t pos, size;
|
||||||
|
|
|
@ -134,6 +134,7 @@ typedef struct URLProtocol {
|
||||||
int priv_data_size;
|
int priv_data_size;
|
||||||
const AVClass *priv_data_class;
|
const AVClass *priv_data_class;
|
||||||
int flags;
|
int flags;
|
||||||
|
int (*url_check)(URLContext *h, int mask);
|
||||||
} URLProtocol;
|
} URLProtocol;
|
||||||
|
|
||||||
typedef struct URLPollEntry {
|
typedef struct URLPollEntry {
|
||||||
|
@ -346,6 +347,23 @@ attribute_deprecated int url_close_buf(AVIOContext *s);
|
||||||
*/
|
*/
|
||||||
int url_exist(const char *url);
|
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
|
* The callback is called in blocking functions to test regulary if
|
||||||
* asynchronous interruption is needed. AVERROR_EXIT is returned
|
* asynchronous interruption is needed. AVERROR_EXIT is returned
|
||||||
|
|
|
@ -59,6 +59,7 @@ typedef struct URLProtocol {
|
||||||
int priv_data_size;
|
int priv_data_size;
|
||||||
const AVClass *priv_data_class;
|
const AVClass *priv_data_class;
|
||||||
int flags;
|
int flags;
|
||||||
|
int (*url_check)(URLContext *h, int mask);
|
||||||
} URLProtocol;
|
} URLProtocol;
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue