diff options
author | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2014-02-17 12:51:38 +0100 |
---|---|---|
committer | Stefano Pigozzi <stefano.pigozzi@gmail.com> | 2014-02-17 19:39:49 +0100 |
commit | 689646962ea4bfd83b37a898f5669be071d3e17d (patch) | |
tree | 1bfb1601a898c7d151835da2099c644fa6cf2f56 /stream | |
parent | 5fcf4b46f7e1eea43a2e675a6be3fa99c2dd4dd6 (diff) | |
download | mpv-689646962ea4bfd83b37a898f5669be071d3e17d.tar.bz2 mpv-689646962ea4bfd83b37a898f5669be071d3e17d.tar.xz |
stream_file: activate cache with files on network file systems
Detected 'protocols' are AFP, nfs, smb and webdav. This can be extended on
request.
This is currently only implemented for BSD systems (using fstatfs). This
addresses issue #558 on the above platforms.
Diffstat (limited to 'stream')
-rw-r--r-- | stream/stream_file.c | 28 |
1 files changed, 28 insertions, 0 deletions
diff --git a/stream/stream_file.c b/stream/stream_file.c index 3591227f75..570546db19 100644 --- a/stream/stream_file.c +++ b/stream/stream_file.c @@ -34,6 +34,11 @@ #include "options/m_option.h" #include "options/path.h" +#if HAVE_BSD_FSTATFS +#include <sys/param.h> +#include <sys/mount.h> +#endif + struct priv { int fd; bool close; @@ -108,6 +113,26 @@ char *mp_file_url_to_filename(void *talloc_ctx, bstr url) return filename; } +#if HAVE_BSD_FSTATFS +static bool check_stream_network(stream_t *stream) +{ + struct statfs fs; + const char *stypes[] = { "afpfs", "nfs", "smbfs", "webdav", NULL }; + struct priv *priv = stream->priv; + if (fstatfs(priv->fd, &fs) == 0) + for (int i=0; stypes[i]; i++) + if (strcmp(stypes[i], fs.f_fstypename) == 0) + return true; + return false; + +} +#else +static bool check_stream_network(stream_t *stream) +{ + return false; +} +#endif + static int open_f(stream_t *stream, int mode) { int fd; @@ -195,6 +220,9 @@ static int open_f(stream_t *stream, int mode) stream->read_chunk = 64 * 1024; stream->close = s_close; + if (check_stream_network(stream)) + stream->streaming = true; + return STREAM_OK; } |