summaryrefslogtreecommitdiffstats
path: root/mpvcore/m_property.c
diff options
context:
space:
mode:
Diffstat (limited to 'mpvcore/m_property.c')
-rw-r--r--mpvcore/m_property.c12
1 files changed, 9 insertions, 3 deletions
diff --git a/mpvcore/m_property.c b/mpvcore/m_property.c
index 83c6ea1018..6e25bf4e43 100644
--- a/mpvcore/m_property.c
+++ b/mpvcore/m_property.c
@@ -219,14 +219,20 @@ static int expand_property(const m_option_t *prop_list, char **ret, int *ret_len
{
bool cond_yes = bstr_eatstart0(&prop, "?");
bool cond_no = !cond_yes && bstr_eatstart0(&prop, "!");
+ bool test = cond_yes || cond_no;
bool raw = bstr_eatstart0(&prop, "=");
- int method =
- (raw || cond_yes || cond_no) ? M_PROPERTY_GET_STRING : M_PROPERTY_PRINT;
+ bstr comp_with = {0};
+ bool comp = test && bstr_split_tok(prop, "==", &prop, &comp_with);
+ if (test && !comp)
+ raw = true;
+ int method = raw ? 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) {
+ if (comp) {
+ skip = ((s && bstr_equals0(comp_with, s)) != cond_yes);
+ } else if (test) {
skip = (!!s != cond_yes);
} else {
skip = !!s;