diff --git a/src/conf.c b/src/conf.c index 73990d45d..116a4ea5f 100644 --- a/src/conf.c +++ b/src/conf.c @@ -25,6 +25,7 @@ #include #include +#include #include #define MAX_STRING_SIZE MPD_PATH_MAX+80 @@ -457,6 +458,27 @@ config_get_block_string(struct config_param *param, const char *name, return bp->value; } +unsigned +config_get_block_unsigned(struct config_param *param, const char *name, + unsigned default_value) +{ + struct block_param *bp = getBlockParam(param, name); + long value; + char *endptr; + + if (bp == NULL) + return default_value; + + value = strtol(bp->value, &endptr, 0); + if (*endptr != 0) + g_error("Not a valid number in line %i", bp->line); + + if (value < 0) + g_error("Not a positive number in line %i", bp->line); + + return (unsigned)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 3026c9579..2aed9af9a 100644 --- a/src/conf.h +++ b/src/conf.h @@ -125,6 +125,10 @@ config_dup_block_string(struct config_param *param, const char *name, return g_strdup(config_get_block_string(param, name, default_value)); } +unsigned +config_get_block_unsigned(struct config_param *param, const char *name, + unsigned default_value); + bool config_get_block_bool(struct config_param *param, const char *name, bool default_value); diff --git a/src/output/alsa_plugin.c b/src/output/alsa_plugin.c index 0dc357ff5..b3520191e 100644 --- a/src/output/alsa_plugin.c +++ b/src/output/alsa_plugin.c @@ -90,16 +90,12 @@ static void freeAlsaData(AlsaData * ad) static void alsa_configure(AlsaData *ad, struct config_param *param) { - struct block_param *bp; - ad->device = config_dup_block_string(param, "device", NULL); ad->useMmap = config_get_block_bool(param, "use_mmap", false); - if ((bp = getBlockParam(param, "buffer_time"))) - ad->buffer_time = atoi(bp->value); - if ((bp = getBlockParam(param, "period_time"))) - ad->period_time = atoi(bp->value); + ad->buffer_time = config_get_block_unsigned(param, "buffer_time", 0); + ad->period_time = config_get_block_unsigned(param, "period_time", 0); #ifdef SND_PCM_NO_AUTO_RESAMPLE if (!config_get_block_bool(param, "auto_resample", true)) diff --git a/src/output/ao_plugin.c b/src/output/ao_plugin.c index d20496e2c..f24805de0 100644 --- a/src/output/ao_plugin.c +++ b/src/output/ao_plugin.c @@ -80,19 +80,10 @@ audioOutputAo_initDriver(struct audio_output *ao, struct config_param *param) { ao_info *ai; - 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); - if (*test != '\0') { - g_error("\"%s\" is not a valid write size at line %i\n", - blockParam->value, blockParam->line); - } - } else - ad->writeSize = 1024; + ad->writeSize = config_get_block_unsigned(param, "write_size", 1024); if (driverInitCount == 0) { ao_initialize(); diff --git a/src/output/jack_plugin.c b/src/output/jack_plugin.c index 224fcd341..185f73860 100644 --- a/src/output/jack_plugin.c +++ b/src/output/jack_plugin.c @@ -187,9 +187,6 @@ mpd_jack_init(struct audio_output *ao, { struct jack_data *jd; const char *value; - struct block_param *bp; - char *endptr; - int val; jd = mpd_jack_new(); jd->ao = ao; @@ -212,18 +209,8 @@ mpd_jack_init(struct audio_output *ao, g_free(ports); } - if ( (bp = getBlockParam(param, "ringbuffer_size")) ) { - errno = 0; - val = strtol(bp->value, &endptr, 10); - - if ( errno == 0 && endptr != bp->value) { - jd->ringbuffer_size = val < 32768 ? 32768 : val; - g_debug("ringbuffer_size=%d", jd->ringbuffer_size); - } else { - g_error("%s is not a number; ringbuf_size=%d", - bp->value, jd->ringbuffer_size); - } - } + jd->ringbuffer_size = + config_get_block_unsigned(param, "ringbuffer_size", 32768); return jd; } diff --git a/src/output/shout_plugin.c b/src/output/shout_plugin.c index 069a0b307..7d3e4aaf0 100644 --- a/src/output/shout_plugin.c +++ b/src/output/shout_plugin.c @@ -221,14 +221,8 @@ static void *my_shout_init_driver(struct audio_output *audio_output, } /* optional paramters */ - block_param = getBlockParam(param, "timeout"); - if (block_param) { - sd->timeout = (int)strtol(block_param->value, &test, 10); - if (*test != '\0' || sd->timeout <= 0) { - g_error("shout timeout is not a positive integer, " - "line %i\n", block_param->line); - } - } + sd->timeout = config_get_block_unsigned(param, "timeout", + DEFAULT_CONN_TIMEOUT); value = config_get_block_string(param, "genre", NULL); if (value != NULL && shout_set_genre(sd->shout_conn, value)) {