diff options
author | Max Kellermann <max@duempel.org> | 2009-01-30 00:40:14 +0100 |
---|---|---|
committer | Max Kellermann <max@duempel.org> | 2009-01-30 00:40:14 +0100 |
commit | dc1cc7e7e52960cceea5514397ec33f7ffc0dd6d (patch) | |
tree | a76aba35426426992ebfa3c58d0e348b5152658b | |
parent | 297101c3f869abe02aeb642774f6c82b75fcfe81 (diff) | |
download | mpd-dc1cc7e7e52960cceea5514397ec33f7ffc0dd6d.tar.gz mpd-dc1cc7e7e52960cceea5514397ec33f7ffc0dd6d.tar.xz mpd-dc1cc7e7e52960cceea5514397ec33f7ffc0dd6d.zip |
input_stream: let the implementation assign is->plugin
This way, plugins can manipulate the plugin pointer during open().
-rw-r--r-- | src/input_archive.c | 1 | ||||
-rw-r--r-- | src/input_curl.c | 1 | ||||
-rw-r--r-- | src/input_file.c | 1 | ||||
-rw-r--r-- | src/input_stream.c | 8 |
4 files changed, 10 insertions, 1 deletions
diff --git a/src/input_archive.c b/src/input_archive.c index d687d9623..387ad465a 100644 --- a/src/input_archive.c +++ b/src/input_archive.c @@ -87,6 +87,7 @@ input_archive_open(struct input_stream *is, const char *pathname) is->plugin = &input_plugin_archive; //internal handle + is->plugin = &input_plugin_archive; is->data = arch_ctx; //open archive diff --git a/src/input_curl.c b/src/input_curl.c index fd28c480e..4956cf5c9 100644 --- a/src/input_curl.c +++ b/src/input_curl.c @@ -909,6 +909,7 @@ input_curl_open(struct input_stream *is, const char *url) c->buffers = g_queue_new(); c->rewind = g_queue_new(); + is->plugin = &input_plugin_curl; is->data = c; c->multi = curl_multi_init(); diff --git a/src/input_file.c b/src/input_file.c index 5eee8101c..1b6d82f9d 100644 --- a/src/input_file.c +++ b/src/input_file.c @@ -62,6 +62,7 @@ input_file_open(struct input_stream *is, const char *filename) posix_fadvise(fd, (off_t)0, is->size, POSIX_FADV_SEQUENTIAL); #endif + is->plugin = &input_plugin_file; is->data = GINT_TO_POINTER(fd); is->ready = true; diff --git a/src/input_stream.c b/src/input_stream.c index 234511e7f..b25f3bf40 100644 --- a/src/input_stream.c +++ b/src/input_stream.c @@ -80,7 +80,13 @@ input_stream_open(struct input_stream *is, const char *url) const struct input_plugin *plugin = input_plugins[i]; if (plugin->open(is, url)) { - is->plugin = plugin; + assert(is->plugin != NULL); + assert(is->plugin->open == NULL || + is->plugin == plugin); + assert(is->plugin->close != NULL); + assert(is->plugin->read != NULL); + assert(is->plugin->eof != NULL); + return true; } } |