From ab706f996908bf7de3774f36af70ed485e1a0eb9 Mon Sep 17 00:00:00 2001 From: wm4 Date: Fri, 20 Sep 2013 22:26:08 +0200 Subject: m_property: rearrange code --- mpvcore/m_property.c | 47 +++++++++++++++++++++++++++-------------------- 1 file changed, 27 insertions(+), 20 deletions(-) diff --git a/mpvcore/m_property.c b/mpvcore/m_property.c index 6517d8abe9..83c6ea1018 100644 --- a/mpvcore/m_property.c +++ b/mpvcore/m_property.c @@ -214,6 +214,31 @@ static void append_str(char **s, int *len, bstr append) *len = *len + append.len; } +static int expand_property(const m_option_t *prop_list, char **ret, int *ret_len, + bstr prop, bool silent_error, void *ctx) +{ + bool cond_yes = bstr_eatstart0(&prop, "?"); + bool cond_no = !cond_yes && bstr_eatstart0(&prop, "!"); + bool raw = bstr_eatstart0(&prop, "="); + int method = + (raw || cond_yes || cond_no) ? M_PROPERTY_GET_STRING : M_PROPERTY_PRINT; + + char *s = NULL; + int r = m_property_do_bstr(prop_list, prop, method, &s, ctx); + bool skip; + if (cond_yes || cond_no) { + skip = (!!s != cond_yes); + } else { + skip = !!s; + char *append = s; + if (!s && !silent_error && !raw) + append = (r == M_PROPERTY_UNAVAILABLE) ? "(unavailable)" : "(error)"; + append_str(ret, ret_len, bstr0(append)); + } + talloc_free(s); + return skip; +} + char *m_properties_expand_string(const m_option_t *prop_list, char *str0, void *ctx) { @@ -240,26 +265,8 @@ char *m_properties_expand_string(const m_option_t *prop_list, char *str0, bool have_fallback = bstr_eatstart0(&str, ":"); if (!skip) { - bool cond_yes = bstr_eatstart0(&name, "?"); - bool cond_no = !cond_yes && bstr_eatstart0(&name, "!"); - bool raw = bstr_eatstart0(&name, "="); - int method = (raw || cond_yes || cond_no) - ? M_PROPERTY_GET_STRING : M_PROPERTY_PRINT; - - char *s = NULL; - int r = m_property_do_bstr(prop_list, name, method, &s, ctx); - if (cond_yes || cond_no) { - skip = (!!s != cond_yes); - } else { - skip = !!s; - char *append = s; - if (!s && !have_fallback && !raw) { - append = r == M_PROPERTY_UNAVAILABLE - ? "(unavailable)" : "(error)"; - } - append_str(&ret, &ret_len, bstr0(append)); - } - talloc_free(s); + skip = expand_property(prop_list, &ret, &ret_len, name, + have_fallback, ctx); if (skip) skip_level = level; } -- cgit v1.2.3