From a531a1e65075d27574bc31d4bac7ab20cb750efd Mon Sep 17 00:00:00 2001 From: Max Kellermann Date: Sun, 18 Jan 2009 19:37:27 +0100 Subject: conf: added config_get_block_string() This replaces lots of getBlockParam() invocations. --- src/conf.c | 12 +++++++ src/conf.h | 11 +++++++ src/mixer/alsa_mixer.c | 13 +++++--- src/mixer/oss_mixer.c | 14 ++++---- src/output/alsa_plugin.c | 3 +- src/output/ao_plugin.c | 17 +++++----- src/output/fifo_plugin.c | 13 ++++---- src/output/jack_plugin.c | 8 +++-- src/output/oss_plugin.c | 7 ++-- src/output/pulse_plugin.c | 13 +++----- src/output/shout_plugin.c | 82 +++++++++++++++++------------------------------ 11 files changed, 95 insertions(+), 98 deletions(-) (limited to 'src') diff --git a/src/conf.c b/src/conf.c index a073f32a5..73990d45d 100644 --- a/src/conf.c +++ b/src/conf.c @@ -445,6 +445,18 @@ bool config_get_bool(const char *name, bool default_value) return !!value; } +const char * +config_get_block_string(struct config_param *param, const char *name, + const char *default_value) +{ + struct block_param *bp = getBlockParam(param, name); + + if (bp == NULL) + return default_value; + + return bp->value; +} + bool config_get_block_bool(struct config_param *param, const char *name, bool default_value) diff --git a/src/conf.h b/src/conf.h index dda328ba9..3026c9579 100644 --- a/src/conf.h +++ b/src/conf.h @@ -114,6 +114,17 @@ getBlockParam(struct config_param *param, const char *name); bool config_get_bool(const char *name, bool default_value); +const char * +config_get_block_string(struct config_param *param, const char *name, + const char *default_value); + +static inline char * +config_dup_block_string(struct config_param *param, const char *name, + const char *default_value) +{ + return g_strdup(config_get_block_string(param, name, default_value)); +} + bool config_get_block_bool(struct config_param *param, const char *name, bool default_value); diff --git a/src/mixer/alsa_mixer.c b/src/mixer/alsa_mixer.c index 72924058b..7dafd22cc 100644 --- a/src/mixer/alsa_mixer.c +++ b/src/mixer/alsa_mixer.c @@ -46,18 +46,21 @@ static void alsa_mixer_configure(struct mixer_data *data, struct config_param *param) { struct alsa_mixer *am = (struct alsa_mixer *)data; - struct block_param *bp; + const char *value; if (param == NULL) return; - if ((bp = getBlockParam(param, "mixer_device"))) { + value = config_get_block_string(param, "mixer_device", NULL); + if (value != NULL) { g_free(am->device); - am->device = g_strdup(bp->value); + am->device = g_strdup(value); } - if ((bp = getBlockParam(param, "mixer_control"))) { + + value = config_get_block_string(param, "mixer_control", NULL); + if (value != NULL) { g_free(am->control); - am->control = g_strdup(bp->value); + am->control = g_strdup(value); } } diff --git a/src/mixer/oss_mixer.c b/src/mixer/oss_mixer.c index 0ee44a693..5e3b65f46 100644 --- a/src/mixer/oss_mixer.c +++ b/src/mixer/oss_mixer.c @@ -50,21 +50,21 @@ static void oss_mixer_configure(struct mixer_data *data, struct config_param *param) { struct oss_mixer *om = (struct oss_mixer *) data; - struct block_param *bp; + const char *value; if (param == NULL) return; - bp = getBlockParam(param, "mixer_device"); - if (bp) { + value = config_get_block_string(param, "mixer_device", NULL); + if (value != NULL) { g_free(om->device); - om->device = g_strdup(bp->value); + om->device = g_strdup(value); } - bp = getBlockParam(param, "mixer_control"); - if (bp) { + value = config_get_block_string(param, "mixer_control", NULL); + if (value != NULL) { g_free(om->control); - om->control = g_strdup(bp->value); + om->control = g_strdup(value); } } diff --git a/src/output/alsa_plugin.c b/src/output/alsa_plugin.c index 8034169ba..0dc357ff5 100644 --- a/src/output/alsa_plugin.c +++ b/src/output/alsa_plugin.c @@ -92,8 +92,7 @@ alsa_configure(AlsaData *ad, struct config_param *param) { struct block_param *bp; - if ((bp = getBlockParam(param, "device"))) - ad->device = g_strdup(bp->value); + ad->device = config_dup_block_string(param, "device", NULL); ad->useMmap = config_get_block_bool(param, "use_mmap", false); diff --git a/src/output/ao_plugin.c b/src/output/ao_plugin.c index 269620143..d20496e2c 100644 --- a/src/output/ao_plugin.c +++ b/src/output/ao_plugin.c @@ -83,6 +83,7 @@ audioOutputAo_initDriver(struct audio_output *ao, char *test; AoData *ad = newAoData(); struct block_param *blockParam; + const char *value; if ((blockParam = getBlockParam(param, "write_size"))) { ad->writeSize = strtol(blockParam->value, &test, 10); @@ -98,14 +99,12 @@ audioOutputAo_initDriver(struct audio_output *ao, } driverInitCount++; - blockParam = getBlockParam(param, "driver"); - - if (!blockParam || 0 == strcmp(blockParam->value, "default")) { + value = config_get_block_string(param, "driver", "default"); + if (0 == strcmp(value, "default")) { ad->driverId = ao_default_driver_id(); - } else if ((ad->driverId = ao_driver_id(blockParam->value)) < 0) { + } else if ((ad->driverId = ao_driver_id(value)) < 0) g_error("\"%s\" is not a valid ao driver at line %i\n", - blockParam->value, blockParam->line); - } + value, param->line); if ((ai = ao_driver_info(ad->driverId)) == NULL) { g_error("problems getting driver info for device defined at line %i\n" @@ -115,9 +114,9 @@ audioOutputAo_initDriver(struct audio_output *ao, g_debug("using ao driver \"%s\" for \"%s\"\n", ai->short_name, audio_output_get_name(ao)); - blockParam = getBlockParam(param, "options"); - if (blockParam) { - gchar **options = g_strsplit(blockParam->value, ";", 0); + value = config_get_block_string(param, "options", NULL); + if (value != NULL) { + gchar **options = g_strsplit(value, ";", 0); for (unsigned i = 0; options[i] != NULL; ++i) { gchar **key_value = g_strsplit(options[i], "=", 2); diff --git a/src/output/fifo_plugin.c b/src/output/fifo_plugin.c index 01db714cf..5d1f287b2 100644 --- a/src/output/fifo_plugin.c +++ b/src/output/fifo_plugin.c @@ -164,19 +164,18 @@ static void *fifo_initDriver(G_GNUC_UNUSED struct audio_output *ao, struct config_param *param) { FifoData *fd; - struct block_param *blockParam; - char *path; + char *value, *path; - blockParam = getBlockParam(param, "path"); - if (!blockParam) { + value = config_dup_block_string(param, "path", NULL); + if (value == NULL) g_error("No \"path\" parameter specified for fifo output " "defined at line %i", param->line); - } - path = parsePath(blockParam->value); + path = parsePath(value); + g_free(value); if (!path) { g_error("Could not parse \"path\" parameter for fifo output " - "at line %i", blockParam->line); + "at line %i", param->line); } fd = newFifoData(); diff --git a/src/output/jack_plugin.c b/src/output/jack_plugin.c index 5723a04ca..224fcd341 100644 --- a/src/output/jack_plugin.c +++ b/src/output/jack_plugin.c @@ -186,6 +186,7 @@ mpd_jack_init(struct audio_output *ao, struct config_param *param) { struct jack_data *jd; + const char *value; struct block_param *bp; char *endptr; int val; @@ -197,12 +198,13 @@ mpd_jack_init(struct audio_output *ao, if (param == NULL) return jd; - if ( (bp = getBlockParam(param, "ports")) ) { - char **ports = g_strsplit(bp->value, ",", 0); + value = config_get_block_string(param, "ports", NULL); + if (value != NULL) { + char **ports = g_strsplit(value, ",", 0); if (ports[0] == NULL || ports[1] == NULL || ports[2] != NULL) g_error("two port names expected in line %d", - bp->line); + param->line); jd->output_ports[0] = ports[0]; jd->output_ports[1] = ports[1]; diff --git a/src/output/oss_plugin.c b/src/output/oss_plugin.c index f66280752..e83a05c5a 100644 --- a/src/output/oss_plugin.c +++ b/src/output/oss_plugin.c @@ -393,10 +393,11 @@ oss_initDriver(G_GNUC_UNUSED struct audio_output *audioOutput, struct config_param *param) { if (param) { - struct block_param *bp = getBlockParam(param, "device"); - if (bp) { + const char *device = + config_get_block_string(param, "device", NULL); + if (device != NULL) { OssData *od = newOssData(); - od->device = bp->value; + od->device = device; mixer_configure(&od->mixer, param); return od; } diff --git a/src/output/pulse_plugin.c b/src/output/pulse_plugin.c index 7d746378c..45710b4a9 100644 --- a/src/output/pulse_plugin.c +++ b/src/output/pulse_plugin.c @@ -57,19 +57,14 @@ pulse_init(struct audio_output *ao, G_GNUC_UNUSED const struct audio_format *audio_format, struct config_param *param) { - struct block_param *server = NULL; - struct block_param *sink = NULL; struct pulse_data *pd; - if (param) { - server = getBlockParam(param, "server"); - sink = getBlockParam(param, "sink"); - } - pd = pulse_new_data(); pd->ao = ao; - pd->server = server != NULL ? g_strdup(server->value) : NULL; - pd->sink = sink != NULL ? g_strdup(sink->value) : NULL; + pd->server = param != NULL + ? config_dup_block_string(param, "server", NULL) : NULL; + pd->sink = param != NULL + ? config_dup_block_string(param, "sink", NULL) : NULL; return pd; } diff --git a/src/output/shout_plugin.c b/src/output/shout_plugin.c index 7ca885996..069a0b307 100644 --- a/src/output/shout_plugin.c +++ b/src/output/shout_plugin.c @@ -106,6 +106,7 @@ static void *my_shout_init_driver(struct audio_output *audio_output, unsigned protocol; const char *user; char *name; + const char *value; struct block_param *block_param; int public; @@ -140,45 +141,34 @@ static void *my_shout_init_driver(struct audio_output *audio_output, public = config_get_block_bool(param, "public", false); - block_param = getBlockParam(param, "user"); - if (block_param) - user = block_param->value; - else - user = "source"; + user = config_get_block_string(param, "user", "source"); - block_param = getBlockParam(param, "quality"); - - if (block_param) { - int line = block_param->line; - - sd->quality = strtod(block_param->value, &test); + value = config_get_block_string(param, "quality", NULL); + if (value != NULL) { + sd->quality = strtod(value, &test); if (*test != '\0' || sd->quality < -1.0 || sd->quality > 10.0) { g_error("shout quality \"%s\" is not a number in the " - "range -1 to 10, line %i\n", block_param->value, - block_param->line); + "range -1 to 10, line %i", + value, param->line); } - block_param = getBlockParam(param, "bitrate"); - - if (block_param) { - g_error("quality (line %i) and bitrate (line %i) are " - "both defined for shout output\n", line, - block_param->line); + if (config_get_block_string(param, "bitrate", NULL) != NULL) { + g_error("quality and bitrate are " + "both defined for shout output (line %i)", + param->line); } } else { - block_param = getBlockParam(param, "bitrate"); - - if (!block_param) { + value = config_get_block_string(param, "bitrate", NULL); + if (value == NULL) g_error("neither bitrate nor quality defined for shout " - "output at line %i\n", param->line); - } + "output at line %i", param->line); - sd->bitrate = strtol(block_param->value, &test, 10); + sd->bitrate = strtol(value, &test, 10); if (*test != '\0' || sd->bitrate <= 0) { g_error("bitrate at line %i should be a positive integer " - "\n", block_param->line); + "\n", param->line); } } @@ -187,42 +177,29 @@ static void *my_shout_init_driver(struct audio_output *audio_output, assert(audio_format != NULL); sd->audio_format = *audio_format; - block_param = getBlockParam(param, "encoding"); - if (block_param) { - if (0 == strcmp(block_param->value, "mp3")) - encoding = block_param->value; - else if (0 == strcmp(block_param->value, "ogg")) - encoding = block_param->value; - else - g_error("shout encoding \"%s\" is not \"ogg\" or " - "\"mp3\", line %i\n", block_param->value, - block_param->line); - } else { - encoding = "ogg"; - } - + encoding = config_get_block_string(param, "encoding", "ogg"); sd->encoder = shout_encoder_plugin_get(encoding); if (sd->encoder == NULL) g_error("couldn't find shout encoder plugin \"%s\"\n", encoding); - block_param = getBlockParam(param, "protocol"); - if (block_param) { - if (0 == strcmp(block_param->value, "shoutcast") && + value = config_get_block_string(param, "protocol", NULL); + if (value != NULL) { + if (0 == strcmp(value, "shoutcast") && 0 != strcmp(encoding, "mp3")) g_error("you cannot stream \"%s\" to shoutcast, use mp3\n", encoding); - else if (0 == strcmp(block_param->value, "shoutcast")) + else if (0 == strcmp(value, "shoutcast")) protocol = SHOUT_PROTOCOL_ICY; - else if (0 == strcmp(block_param->value, "icecast1")) + else if (0 == strcmp(value, "icecast1")) protocol = SHOUT_PROTOCOL_XAUDIOCAST; - else if (0 == strcmp(block_param->value, "icecast2")) + else if (0 == strcmp(value, "icecast2")) protocol = SHOUT_PROTOCOL_HTTP; else g_error("shout protocol \"%s\" is not \"shoutcast\" or " "\"icecast1\"or " - "\"icecast2\", line %i\n", block_param->value, - block_param->line); + "\"icecast2\", line %i\n", + value, param->line); } else { protocol = SHOUT_PROTOCOL_HTTP; } @@ -253,15 +230,14 @@ static void *my_shout_init_driver(struct audio_output *audio_output, } } - block_param = getBlockParam(param, "genre"); - if (block_param && shout_set_genre(sd->shout_conn, block_param->value)) { + value = config_get_block_string(param, "genre", NULL); + if (value != NULL && shout_set_genre(sd->shout_conn, value)) { g_error("error configuring shout defined at line %i: %s\n", param->line, shout_get_error(sd->shout_conn)); } - block_param = getBlockParam(param, "description"); - if (block_param && shout_set_description(sd->shout_conn, - block_param->value)) { + value = config_get_block_string(param, "description", NULL); + if (value != NULL && shout_set_description(sd->shout_conn, value)) { g_error("error configuring shout defined at line %i: %s\n", param->line, shout_get_error(sd->shout_conn)); } -- cgit v1.2.3