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 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);
|
||||
if (code != CURLE_OK) {
|
||||
|
|
|
@ -22,9 +22,16 @@
|
|||
#include "input_plugin.h"
|
||||
#include "input_registry.h"
|
||||
#include "conf.h"
|
||||
#include "glib_compat.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.
|
||||
*
|
||||
|
@ -32,16 +39,19 @@
|
|||
* @return the configuration block, or NULL if none was configured
|
||||
*/
|
||||
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;
|
||||
|
||||
while ((param = config_get_next_param(CONF_INPUT, param)) != NULL) {
|
||||
const char *name =
|
||||
config_get_block_string(param, "plugin", NULL);
|
||||
if (name == NULL)
|
||||
g_error("input configuration without 'plugin' name in line %d",
|
||||
param->line);
|
||||
if (name == NULL) {
|
||||
g_set_error(error_r, input_quark(), 0,
|
||||
"input configuration without 'plugin' name in line %d",
|
||||
param->line);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (strcmp(name, plugin_name) == 0)
|
||||
return param;
|
||||
|
@ -50,20 +60,35 @@ input_plugin_config(const char *plugin_name)
|
|||
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) {
|
||||
const struct input_plugin *plugin = input_plugins[i];
|
||||
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))
|
||||
/* the plugin is disabled in mpd.conf */
|
||||
continue;
|
||||
|
||||
if (plugin->init == NULL || plugin->init(param))
|
||||
if (plugin->init == NULL || plugin->init(param, &error))
|
||||
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)
|
||||
|
|
|
@ -22,10 +22,17 @@
|
|||
|
||||
#include "check.h"
|
||||
|
||||
#include <glib.h>
|
||||
#include <stdbool.h>
|
||||
|
||||
/**
|
||||
* 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.
|
||||
|
|
|
@ -35,10 +35,12 @@ struct input_plugin {
|
|||
/**
|
||||
* 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
|
||||
* 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
|
||||
|
|
|
@ -349,7 +349,13 @@ int main(int argc, char *argv[])
|
|||
client_manager_init();
|
||||
replay_gain_global_init();
|
||||
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();
|
||||
|
||||
daemonize(options.daemon);
|
||||
|
|
|
@ -74,7 +74,12 @@ int main(int argc, char **argv)
|
|||
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();
|
||||
|
||||
/* open the playlist */
|
||||
|
|
|
@ -129,6 +129,7 @@ print_tag(const struct tag *tag)
|
|||
|
||||
int main(int argc, char **argv)
|
||||
{
|
||||
GError *error = NULL;
|
||||
const char *decoder_name, *path;
|
||||
const struct decoder_plugin *plugin;
|
||||
struct tag *tag;
|
||||
|
@ -147,7 +148,12 @@ int main(int argc, char **argv)
|
|||
decoder_name = argv[1];
|
||||
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();
|
||||
|
||||
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)
|
||||
{
|
||||
GError *error = NULL;
|
||||
bool ret;
|
||||
const char *decoder_name;
|
||||
struct decoder decoder;
|
||||
|
@ -152,7 +153,12 @@ int main(int argc, char **argv)
|
|||
|
||||
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 = 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)
|
||||
{
|
||||
struct input_stream is;
|
||||
GError *error = NULL;
|
||||
bool success;
|
||||
char buffer[4096];
|
||||
size_t num_read;
|
||||
|
@ -60,7 +61,12 @@ int main(int argc, char **argv)
|
|||
|
||||
tag_pool_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 */
|
||||
|
||||
|
|
Loading…
Reference in New Issue