From: Tanu Kaskinen <tanu.kaskinen@xxxxxxxxx> --- src/pulsecore/conf-parser.c | 24 ++++++++++++++++++++++++ src/pulsecore/conf-parser.h | 5 ++++- 2 files changed, 28 insertions(+), 1 deletions(-) diff --git a/src/pulsecore/conf-parser.c b/src/pulsecore/conf-parser.c index 7152955..673ca37 100644 --- a/src/pulsecore/conf-parser.c +++ b/src/pulsecore/conf-parser.c @@ -287,3 +287,27 @@ int pa_config_parse_string(const char *filename, unsigned line, const char *sect *s = *rvalue ? pa_xstrdup(rvalue) : NULL; return 0; } + +int pa_config_parse_proplist(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata) { + pa_proplist *parsed = NULL; + pa_proplist **p = data; + + pa_assert(filename); + pa_assert(lvalue); + pa_assert(rvalue); + pa_assert(data); + + if (!(parsed = pa_proplist_from_string(rvalue))) { + pa_log("[%s:%u] Failed to parse property list: %s", filename, line, rvalue); + return -1; + } + + if (!*p) + *p = parsed; + else { + pa_proplist_update(*p, PA_UPDATE_REPLACE, parsed); + pa_proplist_free(parsed); + } + + return 0; +} diff --git a/src/pulsecore/conf-parser.h b/src/pulsecore/conf-parser.h index c6c8a14..f8c0e44 100644 --- a/src/pulsecore/conf-parser.h +++ b/src/pulsecore/conf-parser.h @@ -24,6 +24,8 @@ #include <stdio.h> +#include <pulse/proplist.h> + /* An abstract parser for simple, line based, shallow configuration * files consisting of variable assignments only. */ @@ -42,12 +44,13 @@ typedef struct pa_config_item { * NULL */ int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, void *userdata); -/* Generic parsers for integers, size_t, booleans and strings */ +/* Generic parsers for integers, size_t, booleans, strings and proplists */ int pa_config_parse_int(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); int pa_config_parse_unsigned(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); int pa_config_parse_size(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); int pa_config_parse_bool(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); int pa_config_parse_not_bool(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); int pa_config_parse_string(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); +int pa_config_parse_proplist(const char *filename, unsigned line, const char *section, const char *lvalue, const char *rvalue, void *data, void *userdata); #endif -- 1.7.7.3