summaryrefslogtreecommitdiffstats
path: root/stream/stream.c
diff options
context:
space:
mode:
authorwm4 <wm4@nowhere>2014-05-24 14:06:13 +0200
committerwm4 <wm4@nowhere>2014-05-24 16:17:52 +0200
commitaa87c143cb369f1448f8d08086b5ef98998b4436 (patch)
treeb3b3a079f5e82f66e62d46fcad1488a59f387d2c /stream/stream.c
parent80cbb3bac2e2b2a569d5a9a9c6dd5d4f2da04f7c (diff)
downloadmpv-aa87c143cb369f1448f8d08086b5ef98998b4436.tar.bz2
mpv-aa87c143cb369f1448f8d08086b5ef98998b4436.tar.xz
stream: remove chaos related to writeable streams
For some reason, we support writeable streams. (Only encoding uses that, and the use of it looks messy enough that I want to replace it with FILE or avio today.) It's a chaos: most streams do not actually check the mode parameter like they should. Simplify it, and let streams signal availability of write mode by setting a flag in the stream info struct.
Diffstat (limited to 'stream/stream.c')
-rw-r--r--stream/stream.c10
1 files changed, 8 insertions, 2 deletions
diff --git a/stream/stream.c b/stream/stream.c
index 3ea4d475b7..baee62221f 100644
--- a/stream/stream.c
+++ b/stream/stream.c
@@ -289,6 +289,13 @@ static int open_internal(const stream_info_t *sinfo, struct stream *underlying,
s->path = talloc_strdup(s, path);
s->source = underlying;
s->allow_caching = true;
+ s->mode = flags & (STREAM_READ | STREAM_WRITE);
+
+ if ((s->mode & STREAM_WRITE) && !sinfo->can_write) {
+ MP_ERR(s, "No write access implemented.\n");
+ talloc_free(s);
+ return STREAM_ERROR;
+ }
// Parse options
if (sinfo->priv_size) {
@@ -306,8 +313,7 @@ static int open_internal(const stream_info_t *sinfo, struct stream *underlying,
}
}
- s->mode = flags & (STREAM_READ | STREAM_WRITE);
- int r = sinfo->open(s, s->mode);
+ int r = sinfo->open(s);
if (r != STREAM_OK) {
talloc_free(s);
return r;