summaryrefslogtreecommitdiffstats
path: root/m_property.c
diff options
context:
space:
mode:
Diffstat (limited to 'm_property.c')
-rw-r--r--m_property.c71
1 files changed, 14 insertions, 57 deletions
diff --git a/m_property.c b/m_property.c
index af5d51dd21..536049020c 100644
--- a/m_property.c
+++ b/m_property.c
@@ -82,6 +82,7 @@ int m_property_do(const m_option_t *prop_list, const char *name,
if ((r = do_action(prop_list, name, M_PROPERTY_GET, &val, ctx)) <= 0)
return r;
str = m_option_pretty_print(opt, &val);
+ m_option_free(opt, &val);
*(char **)arg = str;
return str != NULL;
case M_PROPERTY_TO_STRING:
@@ -95,6 +96,7 @@ int m_property_do(const m_option_t *prop_list, const char *name,
if ((r = do_action(prop_list, name, M_PROPERTY_GET, &val, ctx)) <= 0)
return r;
str = m_option_print(opt, &val);
+ m_option_free(opt, &val);
*(char **)arg = str;
return str != NULL;
case M_PROPERTY_PARSE:
@@ -215,9 +217,14 @@ char *m_properties_expand_string(const m_option_t *prop_list, char *str,
char pname[pl + 1];
memcpy(pname, str + (is_not ? 3 : 2), pl);
pname[pl] = 0;
- if (m_property_do(prop_list, pname, M_PROPERTY_GET, NULL, ctx) < 0) {
+ struct m_option *opt;
+ union m_option_value val = {0};
+ if (m_property_do(prop_list, pname, M_PROPERTY_GET_TYPE, &opt, ctx) <= 0 &&
+ m_property_do(prop_list, pname, M_PROPERTY_GET, &val, ctx) <= 0)
+ {
if (!is_not)
skip = 1, skip_lvl = lvl;
+ m_option_free(opt, &val);
} else if (is_not)
skip = 1, skip_lvl = lvl;
}
@@ -270,82 +277,32 @@ void m_properties_print_help_list(const m_option_t *list)
mp_tmsg(MSGT_CFGPARSER, MSGL_INFO, "\nTotal: %d properties\n", count);
}
-// Some generic property implementations
-
int m_property_int_ro(const m_option_t *prop, int action,
void *arg, int var)
{
- switch (action) {
- case M_PROPERTY_GET:
+ if (action == M_PROPERTY_GET) {
*(int *)arg = var;
- return 1;
+ return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
}
-int m_property_int_range(const m_option_t *prop, int action,
- void *arg, int *var)
-{
- switch (action) {
- case M_PROPERTY_SET:
- *var = *(int *)arg;
- return 1;
- }
- return m_property_int_ro(prop, action, arg, *var);
-}
-
-int m_property_flag_ro(const m_option_t *prop, int action,
- void *arg, int var)
-{
- return m_property_int_ro(prop, action, arg, var);
-}
-
-int m_property_flag(const m_option_t *prop, int action,
- void *arg, int *var)
-{
- return m_property_int_range(prop, action, arg, var);
-}
-
int m_property_float_ro(const m_option_t *prop, int action,
void *arg, float var)
{
- switch (action) {
- case M_PROPERTY_GET:
+ if (action == M_PROPERTY_GET) {
*(float *)arg = var;
- return 1;
+ return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
}
-int m_property_float_range(const m_option_t *prop, int action,
- void *arg, float *var)
-{
- switch (action) {
- case M_PROPERTY_SET:
- *var = *(float *)arg;
- return 1;
- }
- return m_property_float_ro(prop, action, arg, *var);
-}
-
int m_property_double_ro(const m_option_t *prop, int action,
void *arg, double var)
{
- switch (action) {
- case M_PROPERTY_GET:
+ if (action == M_PROPERTY_GET) {
*(double *)arg = var;
- return 1;
- }
- return M_PROPERTY_NOT_IMPLEMENTED;
-}
-
-int m_property_string_ro(const m_option_t *prop, int action, void *arg,
- char *str)
-{
- switch (action) {
- case M_PROPERTY_GET:
- *(char **)arg = str;
- return 1;
+ return M_PROPERTY_OK;
}
return M_PROPERTY_NOT_IMPLEMENTED;
}