[PATCH v2] weston: Add support for "--foo bar" style options

Quentin Glidic sardemff7+wayland at sardemff7.net
Tue May 23 09:22:14 UTC 2017


On 5/8/17 6:47 PM, Lyude wrote:
> 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 at redhat.com>
> Reviewed-by: Eric Engestrom <eric at engestrom.ch>

Nice one, I had one a loooong time ago but never really rebased it:
Reviewed-by: Quentin Glidic <sardemff7+git at sardemff7.net>

Changed the style a tiny bit (line wrapping) and pushed:
dbfd248d..47bbdc72  master -> master

Thanks,


> ---
>   shared/option-parser.c | 30 ++++++++++++++++++++++++++++++
>   1 file changed, 30 insertions(+)
> 
> diff --git a/shared/option-parser.c b/shared/option-parser.c
> index eee7546..831bd56 100644
> --- a/shared/option-parser.c
> +++ b/shared/option-parser.c
> @@ -87,6 +87,30 @@ long_option(const struct weston_option *options, int count, char *arg)
>   }
>   
>   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
>   short_option(const struct weston_option *options, int count, char *arg)
>   {
>   	int k;
> @@ -148,6 +172,12 @@ parse_options(const struct weston_option *options,
>   				if (long_option(options, count, argv[i]))
>   					continue;
>   
> +				/* ...also handle --foo bar */
> +				if (i + 1 < *argc &&
> +				    long_option_with_arg(options, count, argv[i], argv[i+1])) {
> +					i++;
> +					continue;
> +				}
>   			} else {
>   				/* Short option, e.g -f or -f42 */
>   				if (short_option(options, count, argv[i]))
> 


-- 

Quentin “Sardem FF7” Glidic


More information about the wayland-devel mailing list