input_plugin: method init() returns errors with GError
Not used by any plugin currently, but this eliminates the g_error() call in input_plugin_config(), so it's worth it.
This commit is contained in:
parent
f70d2f58a1
commit
786c1f035f
@ -104,7 +104,8 @@ static const char *proxy, *proxy_user, *proxy_password;
|
|||||||
static unsigned proxy_port;
|
static unsigned proxy_port;
|
||||||
|
|
||||||
static bool
|
static bool
|
||||||
input_curl_init(const struct config_param *param)
|
input_curl_init(const struct config_param *param,
|
||||||
|
G_GNUC_UNUSED GError **error_r)
|
||||||
{
|
{
|
||||||
CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
|
CURLcode code = curl_global_init(CURL_GLOBAL_ALL);
|
||||||
if (code != CURLE_OK) {
|
if (code != CURLE_OK) {
|
||||||
|
@ -22,9 +22,16 @@
|
|||||||
#include "input_plugin.h"
|
#include "input_plugin.h"
|
||||||
#include "input_registry.h"
|
#include "input_registry.h"
|
||||||
#include "conf.h"
|
#include "conf.h"
|
||||||
|
#include "glib_compat.h"
|
||||||
|
|
||||||
#include <string.h>
|
#include <string.h>
|
||||||
|
|
||||||
|
static inline GQuark
|
||||||
|
input_quark(void)
|
||||||
|
{
|
||||||
|
return g_quark_from_static_string("input");
|
||||||
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Find the "input" configuration block for the specified plugin.
|
* Find the "input" configuration block for the specified plugin.
|
||||||
*
|
*
|
||||||
@ -32,16 +39,19 @@
|
|||||||
* @return the configuration block, or NULL if none was configured
|
* @return the configuration block, or NULL if none was configured
|
||||||
*/
|
*/
|
||||||
static const struct config_param *
|
static const struct config_param *
|
||||||
input_plugin_config(const char *plugin_name)
|
input_plugin_config(const char *plugin_name, GError **error_r)
|
||||||
{
|
{
|
||||||
const struct config_param *param = NULL;
|
const struct config_param *param = NULL;
|
||||||
|
|
||||||
while ((param = config_get_next_param(CONF_INPUT, param)) != NULL) {
|
while ((param = config_get_next_param(CONF_INPUT, param)) != NULL) {
|
||||||
const char *name =
|
const char *name =
|
||||||
config_get_block_string(param, "plugin", NULL);
|
config_get_block_string(param, "plugin", NULL);
|
||||||
if (name == NULL)
|
if (name == NULL) {
|
||||||
g_error("input configuration without 'plugin' name in line %d",
|
g_set_error(error_r, input_quark(), 0,
|
||||||
|
"input configuration without 'plugin' name in line %d",
|
||||||
param->line);
|
param->line);
|
||||||
|
return NULL;
|
||||||
|
}
|
||||||
|
|
||||||
if (strcmp(name, plugin_name) == 0)
|
if (strcmp(name, plugin_name) == 0)
|
||||||
return param;
|
return param;
|
||||||
@ -50,22 +60,37 @@ input_plugin_config(const char *plugin_name)
|
|||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
void input_stream_global_init(void)
|
bool
|
||||||
|
input_stream_global_init(GError **error_r)
|
||||||
{
|
{
|
||||||
|
GError *error = NULL;
|
||||||
|
|
||||||
for (unsigned i = 0; input_plugins[i] != NULL; ++i) {
|
for (unsigned i = 0; input_plugins[i] != NULL; ++i) {
|
||||||
const struct input_plugin *plugin = input_plugins[i];
|
const struct input_plugin *plugin = input_plugins[i];
|
||||||
const struct config_param *param =
|
const struct config_param *param =
|
||||||
input_plugin_config(plugin->name);
|
input_plugin_config(plugin->name, &error);
|
||||||
|
if (param == NULL && error != NULL) {
|
||||||
|
g_propagate_error(error_r, error);
|
||||||
|
return false;
|
||||||
|
}
|
||||||
|
|
||||||
if (!config_get_block_bool(param, "enabled", true))
|
if (!config_get_block_bool(param, "enabled", true))
|
||||||
/* the plugin is disabled in mpd.conf */
|
/* the plugin is disabled in mpd.conf */
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
if (plugin->init == NULL || plugin->init(param))
|
if (plugin->init == NULL || plugin->init(param, &error))
|
||||||
input_plugins_enabled[i] = true;
|
input_plugins_enabled[i] = true;
|
||||||
|
else {
|
||||||
|
g_propagate_prefixed_error(error_r, error,
|
||||||
|
"Failed to initialize input plugin '%s': ",
|
||||||
|
plugin->name);
|
||||||
|
return false;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
|
||||||
void input_stream_global_finish(void)
|
void input_stream_global_finish(void)
|
||||||
{
|
{
|
||||||
for (unsigned i = 0; input_plugins[i] != NULL; ++i)
|
for (unsigned i = 0; input_plugins[i] != NULL; ++i)
|
||||||
|
@ -22,10 +22,17 @@
|
|||||||
|
|
||||||
#include "check.h"
|
#include "check.h"
|
||||||
|
|
||||||
|
#include <glib.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Initializes this library and all input_stream implementations.
|
* Initializes this library and all input_stream implementations.
|
||||||
|
*
|
||||||
|
* @param error_r location to store the error occuring, or NULL to
|
||||||
|
* ignore errors
|
||||||
*/
|
*/
|
||||||
void input_stream_global_init(void);
|
bool
|
||||||
|
input_stream_global_init(GError **error_r);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Deinitializes this library and all input_stream implementations.
|
* Deinitializes this library and all input_stream implementations.
|
||||||
|
@ -35,10 +35,12 @@ struct input_plugin {
|
|||||||
/**
|
/**
|
||||||
* Global initialization. This method is called when MPD starts.
|
* Global initialization. This method is called when MPD starts.
|
||||||
*
|
*
|
||||||
|
* @param error_r location to store the error occuring, or
|
||||||
|
* NULL to ignore errors
|
||||||
* @return true on success, false if the plugin should be
|
* @return true on success, false if the plugin should be
|
||||||
* disabled
|
* disabled
|
||||||
*/
|
*/
|
||||||
bool (*init)(const struct config_param *param);
|
bool (*init)(const struct config_param *param, GError **error_r);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Global deinitialization. Called once before MPD shuts
|
* Global deinitialization. Called once before MPD shuts
|
||||||
|
@ -349,7 +349,13 @@ int main(int argc, char *argv[])
|
|||||||
client_manager_init();
|
client_manager_init();
|
||||||
replay_gain_global_init();
|
replay_gain_global_init();
|
||||||
initNormalization();
|
initNormalization();
|
||||||
input_stream_global_init();
|
|
||||||
|
if (!input_stream_global_init(&error)) {
|
||||||
|
g_warning("%s", error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
return EXIT_FAILURE;
|
||||||
|
}
|
||||||
|
|
||||||
playlist_list_global_init();
|
playlist_list_global_init();
|
||||||
|
|
||||||
daemonize(options.daemon);
|
daemonize(options.daemon);
|
||||||
|
@ -74,7 +74,12 @@ int main(int argc, char **argv)
|
|||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
input_stream_global_init();
|
if (!input_stream_global_init(&error)) {
|
||||||
|
g_warning("%s", error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
playlist_list_global_init();
|
playlist_list_global_init();
|
||||||
|
|
||||||
/* open the playlist */
|
/* open the playlist */
|
||||||
|
@ -129,6 +129,7 @@ print_tag(const struct tag *tag)
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
GError *error = NULL;
|
||||||
const char *decoder_name, *path;
|
const char *decoder_name, *path;
|
||||||
const struct decoder_plugin *plugin;
|
const struct decoder_plugin *plugin;
|
||||||
struct tag *tag;
|
struct tag *tag;
|
||||||
@ -147,7 +148,12 @@ int main(int argc, char **argv)
|
|||||||
decoder_name = argv[1];
|
decoder_name = argv[1];
|
||||||
path = argv[2];
|
path = argv[2];
|
||||||
|
|
||||||
input_stream_global_init();
|
if (!input_stream_global_init(&error)) {
|
||||||
|
g_warning("%s", error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
decoder_plugin_init_all();
|
decoder_plugin_init_all();
|
||||||
|
|
||||||
plugin = decoder_plugin_from_name(decoder_name);
|
plugin = decoder_plugin_from_name(decoder_name);
|
||||||
|
@ -138,6 +138,7 @@ decoder_tag(G_GNUC_UNUSED struct decoder *decoder,
|
|||||||
|
|
||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
|
GError *error = NULL;
|
||||||
bool ret;
|
bool ret;
|
||||||
const char *decoder_name;
|
const char *decoder_name;
|
||||||
struct decoder decoder;
|
struct decoder decoder;
|
||||||
@ -152,7 +153,12 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
g_log_set_default_handler(my_log_func, NULL);
|
g_log_set_default_handler(my_log_func, NULL);
|
||||||
|
|
||||||
input_stream_global_init();
|
if (!input_stream_global_init(&error)) {
|
||||||
|
g_warning("%s", error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
decoder_plugin_init_all();
|
decoder_plugin_init_all();
|
||||||
|
|
||||||
decoder.plugin = decoder_plugin_from_name(decoder_name);
|
decoder.plugin = decoder_plugin_from_name(decoder_name);
|
||||||
|
@ -41,6 +41,7 @@ my_log_func(const gchar *log_domain, G_GNUC_UNUSED GLogLevelFlags log_level,
|
|||||||
int main(int argc, char **argv)
|
int main(int argc, char **argv)
|
||||||
{
|
{
|
||||||
struct input_stream is;
|
struct input_stream is;
|
||||||
|
GError *error = NULL;
|
||||||
bool success;
|
bool success;
|
||||||
char buffer[4096];
|
char buffer[4096];
|
||||||
size_t num_read;
|
size_t num_read;
|
||||||
@ -60,7 +61,12 @@ int main(int argc, char **argv)
|
|||||||
|
|
||||||
tag_pool_init();
|
tag_pool_init();
|
||||||
config_global_init();
|
config_global_init();
|
||||||
input_stream_global_init();
|
|
||||||
|
if (!input_stream_global_init(&error)) {
|
||||||
|
g_warning("%s", error->message);
|
||||||
|
g_error_free(error);
|
||||||
|
return 2;
|
||||||
|
}
|
||||||
|
|
||||||
/* open the stream and wait until it becomes ready */
|
/* open the stream and wait until it becomes ready */
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user