diff options
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; } |