From 4d1575173b64b7a95f7cf9626956aebafdbc103f Mon Sep 17 00:00:00 2001 From: wm4 Date: Mon, 24 Feb 2014 21:18:53 +0100 Subject: command: make options property return the list of all options --- options/m_config.c | 20 ++++++++++++++++++++ options/m_config.h | 3 +++ 2 files changed, 23 insertions(+) (limited to 'options') diff --git a/options/m_config.c b/options/m_config.c index d2b75389fe..f2cb8ce98f 100644 --- a/options/m_config.c +++ b/options/m_config.c @@ -708,6 +708,26 @@ void m_config_print_option_list(const struct m_config *config) MP_INFO(config, "\nTotal: %d options\n", count); } +char **m_config_list_options(void *ta_parent, const struct m_config *config) +{ + char **list = talloc_new(ta_parent); + int count = 0; + for (int i = 0; i < config->num_opts; i++) { + struct m_config_option *co = &config->opts[i]; + const struct m_option *opt = co->opt; + if (opt->type->flags & M_OPT_TYPE_HAS_CHILD) + continue; + if (co->is_generated) + continue; + // For use with CONF_TYPE_STRING_LIST, it's important not to set list + // as allocation parent. + char *s = talloc_strdup(ta_parent, co->name); + MP_TARRAY_APPEND(ta_parent, list, count, s); + } + MP_TARRAY_APPEND(ta_parent, list, count, NULL); + return list; +} + struct m_profile *m_config_get_profile(const struct m_config *config, bstr name) { for (struct m_profile *p = config->profiles; p; p = p->next) { diff --git a/options/m_config.h b/options/m_config.h index 82382aaa27..632ba09e77 100644 --- a/options/m_config.h +++ b/options/m_config.h @@ -170,6 +170,9 @@ const char *m_config_get_positional_option(const struct m_config *config, int n) // Returns: error code (<0), or number of expected params (0, 1) int m_config_option_requires_param(struct m_config *config, bstr name); +// Return all (visible) option names as NULL terminated string list. +char **m_config_list_options(void *ta_parent, const struct m_config *config); + /* Print a list of all registered options. * \param config The config object. */ -- cgit v1.2.3