Commit 9f5c938f authored by Max Kellermann's avatar Max Kellermann

conf: add config_dup_block_path()

parent b42a8d23
......@@ -606,6 +606,26 @@ config_get_block_string(const struct config_param *param, const char *name,
return bp->value;
}
char *
config_dup_block_path(const struct config_param *param, const char *name,
GError **error_r)
{
assert(error_r != NULL);
assert(*error_r == NULL);
const struct block_param *bp = config_get_block_param(param, name);
if (bp == NULL)
return NULL;
char *path = parsePath(bp->value, error_r);
if (G_UNLIKELY(path == NULL))
g_prefix_error(error_r,
"Invalid path in \"%s\" at line %i: ",
name, bp->line);
return path;
}
unsigned
config_get_block_unsigned(const struct config_param *param, const char *name,
unsigned default_value)
......
......@@ -194,6 +194,15 @@ config_dup_block_string(const struct config_param *param, const char *name,
return g_strdup(config_get_block_string(param, name, default_value));
}
/**
* Same as config_dup_path(), but looks up the setting in the
* specified block.
*/
G_GNUC_MALLOC
char *
config_dup_block_path(const struct config_param *param, const char *name,
GError **error_r);
G_GNUC_PURE
unsigned
config_get_block_unsigned(const struct config_param *param, const char *name,
......
......@@ -178,30 +178,25 @@ fifo_open(struct fifo_data *fd, GError **error)
static void *
fifo_output_init(G_GNUC_UNUSED const struct audio_format *audio_format,
const struct config_param *param,
GError **error)
GError **error_r)
{
struct fifo_data *fd;
char *value, *path;
value = config_dup_block_string(param, "path", NULL);
if (value == NULL) {
g_set_error(error, fifo_output_quark(), errno,
"No \"path\" parameter specified");
return NULL;
}
path = parsePath(value, error);
g_free(value);
GError *error = NULL;
char *path = config_dup_block_path(param, "path", &error);
if (!path) {
g_prefix_error(error, "Invalid path in line %i: ",
param->line);
if (error != NULL)
g_propagate_error(error_r, error);
else
g_set_error(error_r, fifo_output_quark(), 0,
"No \"path\" parameter specified");
return NULL;
}
fd = fifo_data_new();
fd->path = path;
if (!fifo_open(fd, error)) {
if (!fifo_open(fd, error_r)) {
fifo_data_free(fd);
return NULL;
}
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment