summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--stream/stream_file.c28
-rw-r--r--wscript5
2 files changed, 33 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;
}
diff --git a/wscript b/wscript
index de70718555..2292a44747 100644
--- a/wscript
+++ b/wscript
@@ -197,6 +197,11 @@ iconv support use --disable-iconv.",
'desc': 'setmode()',
'func': check_statement('io.h', 'setmode(0, 0)')
}, {
+ 'name': 'bsd-fstatfs',
+ 'desc': "BSD's fstatfs()",
+ 'func': check_statement(['sys/param.h', 'sys/mount.h'],
+ 'struct statfs fs; fstatfs(0, &fs)')
+ }, {
'name': 'sys-sysinfo-h',
'desc': 'sys/sysinfo.h',
'func': check_statement('sys/sysinfo.h',