diff options
Diffstat (limited to 'options/m_option.c')
-rw-r--r-- | options/m_option.c | 15 |
1 files changed, 13 insertions, 2 deletions
diff --git a/options/m_option.c b/options/m_option.c index 51e3c38801..9b0fd82779 100644 --- a/options/m_option.c +++ b/options/m_option.c @@ -2145,7 +2145,7 @@ static bool parse_geometry_str(struct m_geometry *gm, bstr s) if (s.len == 0) return true; // Approximate grammar: - // [[W][xH]][{+-}X{+-}Y] | [X:Y] + // [[W][xH]][{+-}X{+-}Y][/WS] | [X:Y] // (meaning: [optional] {one character of} one|alternative) // Every number can be followed by '%' int num; @@ -2181,6 +2181,14 @@ static bool parse_geometry_str(struct m_geometry *gm, bstr s) READ_SIGN(y_sign); READ_NUM(y, y_per); } + if (bstr_eatstart0(&s, "/")) { + bstr rest; + long long v = bstrtoll(s, &rest, 10); + if (s.len == rest.len || v < 1 || v > INT_MAX) + goto error; + s = rest; + gm->ws = v; + } } else { gm->xy_valid = true; READ_NUM(x, x_per); @@ -2217,6 +2225,8 @@ static char *print_geometry(const m_option_t *opt, const void *val) res = talloc_asprintf_append(res, gm->y_sign ? "-" : "+"); APPEND_PER(y, y_per); } + if (gm->ws > 0) + res = talloc_asprintf_append(res, "/%d", gm->ws); } return res; } @@ -2301,7 +2311,8 @@ static bool geometry_equal(const m_option_t *opt, void *a, void *b) ga->xy_valid == gb->xy_valid && ga->wh_valid == gb->wh_valid && ga->w_per == gb->w_per && ga->h_per == gb->h_per && ga->x_per == gb->x_per && ga->y_per == gb->y_per && - ga->x_sign == gb->x_sign && ga->y_sign == gb->y_sign; + ga->x_sign == gb->x_sign && ga->y_sign == gb->y_sign && + ga->ws == gb->ws; } const m_option_type_t m_option_type_geometry = { |