diff options
| author | Hans de Goede <[email protected]> | 2019-11-18 16:51:26 +0100 | 
|---|---|---|
| committer | Hans de Goede <[email protected]> | 2019-12-16 12:13:17 +0100 | 
| commit | 739b200c2edcaaa7a86f37b0c11db57956433dfb (patch) | |
| tree | b0216d489f5bcf8759f0ac08843313cab41f035f | |
| parent | cfb0881b8f621b656a9e23b31944a5db94cf5842 (diff) | |
drm/modes: parse_cmdline: Rework drm_mode_parse_cmdline_options()
Refactor drm_mode_parse_cmdline_options() so that it takes a pointer
to the first option, rather then a pointer to the ',' before the first
option.
This is a preparation patch for allowing parsing of stand-alone options
without a mode before them, e.g.: video=HDMI-1:margin_right=14,...
Acked-by: Maxime Ripard <[email protected]>
Signed-off-by: Hans de Goede <[email protected]>
Link: https://patchwork.freedesktop.org/patch/msgid/[email protected]
| -rw-r--r-- | drivers/gpu/drm/drm_modes.c | 21 | 
1 files changed, 9 insertions, 12 deletions
| diff --git a/drivers/gpu/drm/drm_modes.c b/drivers/gpu/drm/drm_modes.c index f49401124727..25e8edf4cfb8 100644 --- a/drivers/gpu/drm/drm_modes.c +++ b/drivers/gpu/drm/drm_modes.c @@ -1591,23 +1591,21 @@ static int drm_mode_parse_cmdline_int(const char *delim, unsigned int *int_ret)  	return 0;  } -static int drm_mode_parse_cmdline_options(const char *str, size_t len, +static int drm_mode_parse_cmdline_options(const char *str,  					  const struct drm_connector *connector,  					  struct drm_cmdline_mode *mode)  {  	unsigned int deg, margin, rotation = 0; -	const char *sep = str; +	const char *delim, *option, *sep; -	while ((sep = strchr(sep, ','))) { -		const char *delim, *option; - -		option = sep + 1; +	option = str; +	do {  		delim = strchr(option, '=');  		if (!delim) {  			delim = strchr(option, ',');  			if (!delim) -				delim = str + len; +				delim = option + strlen(option);  		}  		if (!strncmp(option, "rotate", delim - option)) { @@ -1661,8 +1659,9 @@ static int drm_mode_parse_cmdline_options(const char *str, size_t len,  		} else {  			return -EINVAL;  		} -		sep = delim; -	} +		sep = strchr(delim, ','); +		option = sep + 1; +	} while (sep);  	mode->rotation_reflection = rotation; @@ -1855,9 +1854,7 @@ bool drm_mode_parse_command_line_for_connector(const char *mode_option,  	}  	if (options_ptr) { -		int len = strlen(name) - (options_ptr - name); - -		ret = drm_mode_parse_cmdline_options(options_ptr, len, +		ret = drm_mode_parse_cmdline_options(options_ptr + 1,  						     connector, mode);  		if (ret)  			return false; |