On 2015-04-17 22:26, Tanu Kaskinen wrote: > This will be used to parse the path default volume in the alsa mixer > configuration files. For now, percentages are the only supported > format, because I don't have need for anything else, but we can of > course add more volume formats later as needed. There is a parse_volume function in pactl.c, how about moving it to somewhere both conf-parser and pactl can use it? > --- > src/pulsecore/conf-parser.c | 36 ++++++++++++++++++++++++++++++++++++ > src/pulsecore/conf-parser.h | 3 ++- > 2 files changed, 38 insertions(+), 1 deletion(-) > > diff --git a/src/pulsecore/conf-parser.c b/src/pulsecore/conf-parser.c > index 2dcd45a..5d54afe 100644 > --- a/src/pulsecore/conf-parser.c > +++ b/src/pulsecore/conf-parser.c > @@ -312,3 +312,39 @@ int pa_config_parse_string(pa_config_parser_state *state) { > *s = *state->rvalue ? pa_xstrdup(state->rvalue) : NULL; > return 0; > } > + > +int pa_config_parse_volume(pa_config_parser_state *state) { > + pa_volume_t *vol; > + size_t len; > + char *d_str; > + double d; > + > + pa_assert(state); > + > + vol = state->data; > + > + len = strlen(state->rvalue); > + if (len < 2) > + goto fail; > + > + if (state->rvalue[len - 1] != '%') > + goto fail; > + > + d_str = pa_xstrndup(state->rvalue, len - 1); > + if (pa_atod(d_str, &d) < 0) > + goto fail; > + pa_xfree(d_str); > + > + d /= 100; > + d *= PA_VOLUME_NORM; > + > + if (d < 0 || d > PA_VOLUME_MAX) > + goto fail; > + > + *vol = d; > + return 0; > + > +fail: > + pa_log("[%s:%u] Failed to parse volume value: %s", state->filename, state->lineno, state->rvalue); > + return -1; > +} > diff --git a/src/pulsecore/conf-parser.h b/src/pulsecore/conf-parser.h > index dbb6f5c..62d7046 100644 > --- a/src/pulsecore/conf-parser.h > +++ b/src/pulsecore/conf-parser.h > @@ -70,12 +70,13 @@ struct pa_config_parser_state { > * are not allowed at all in the configuration file. */ > int pa_config_parse(const char *filename, FILE *f, const pa_config_item *t, pa_proplist *proplist, void *userdata); > > -/* Generic parsers for integers, size_t, booleans and strings */ > +/* Generic parsers for integers, size_t, booleans, strings and pa_volume_t */ > int pa_config_parse_int(pa_config_parser_state *state); > int pa_config_parse_unsigned(pa_config_parser_state *state); > int pa_config_parse_size(pa_config_parser_state *state); > int pa_config_parse_bool(pa_config_parser_state *state); > int pa_config_parse_not_bool(pa_config_parser_state *state); > int pa_config_parse_string(pa_config_parser_state *state); > +int pa_config_parse_volume(pa_config_parser_state *state); > > #endif > -- David Henningsson, Canonical Ltd. https://launchpad.net/~diwic