weston: Add support for "--foo bar" style options
A little earlier today I ended up spending a lot of time trying to figure out why weston wasn't managing to launch over SSH and telling me that I did not have a --tty option specified, despite me passing the option strings ["--tty", "3"]. Turns out weston just doesn't support that. So, add support for this kind of format in addition to "--foo=bar" to save others from making the same mistake I did. Changes since v1: - Add comment about unreachable boolean check in long_option_with_arg() - Convert boolean check in long_option_with_arg() to assert Signed-off-by: Lyude <lyude@redhat.com> Reviewed-by: Eric Engestrom <eric@engestrom.ch> Reviewed-by: Quentin Glidic <sardemff7+git@sardemff7.net>
This commit is contained in:
parent
dbfd248da4
commit
47bbdc7296
|
@ -86,6 +86,31 @@ long_option(const struct weston_option *options, int count, char *arg)
|
||||||
return 0;
|
return 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int
|
||||||
|
long_option_with_arg(const struct weston_option *options, int count, char *arg,
|
||||||
|
char *param)
|
||||||
|
{
|
||||||
|
int k, len;
|
||||||
|
|
||||||
|
for (k = 0; k < count; k++) {
|
||||||
|
if (!options[k].name)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
len = strlen(options[k].name);
|
||||||
|
if (strncmp(options[k].name, arg + 2, len) != 0)
|
||||||
|
continue;
|
||||||
|
|
||||||
|
/* Since long_option() should handle all booleans, we should
|
||||||
|
* never reach this
|
||||||
|
*/
|
||||||
|
assert(options[k].type != WESTON_OPTION_BOOLEAN);
|
||||||
|
|
||||||
|
return handle_option(options + k, param);
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int
|
static int
|
||||||
short_option(const struct weston_option *options, int count, char *arg)
|
short_option(const struct weston_option *options, int count, char *arg)
|
||||||
{
|
{
|
||||||
|
@ -148,6 +173,13 @@ parse_options(const struct weston_option *options,
|
||||||
if (long_option(options, count, argv[i]))
|
if (long_option(options, count, argv[i]))
|
||||||
continue;
|
continue;
|
||||||
|
|
||||||
|
/* ...also handle --foo bar */
|
||||||
|
if (i + 1 < *argc &&
|
||||||
|
long_option_with_arg(options, count,
|
||||||
|
argv[i], argv[i+1])) {
|
||||||
|
i++;
|
||||||
|
continue;
|
||||||
|
}
|
||||||
} else {
|
} else {
|
||||||
/* Short option, e.g -f or -f42 */
|
/* Short option, e.g -f or -f42 */
|
||||||
if (short_option(options, count, argv[i]))
|
if (short_option(options, count, argv[i]))
|
||||||
|
|
Loading…
Reference in New Issue