summaryrefslogtreecommitdiffstats
path: root/options/m_option.c
diff options
context:
space:
mode:
Diffstat (limited to 'options/m_option.c')
-rw-r--r--options/m_option.c15
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 = {