Re: [PATCH xserver 03/11] modesetting: Simplify mst path blob parsing

2017-11-08 Thread Daniel Martin
On 7 November 2017 at 14:06, Emil Velikov  wrote:
> On 7 November 2017 at 09:38, Daniel Martin  wrote:
>> The kernel guarantees that the MST path property blob of a connector
>> has a certain format and this property is immutable - can't be changed
>> from user space. With that in mind, reduce the parsing code to a minimum
>> matching the format criteria.
>>
>> (Preparation to fold the parsing into output name creation function.)
>>
>> Signed-off-by: Daniel Martin 
>> ---
>>  hw/xfree86/drivers/modesetting/drmmode_display.c | 41 
>> +---
>>  1 file changed, 15 insertions(+), 26 deletions(-)
>>
>> diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c 
>> b/hw/xfree86/drivers/modesetting/drmmode_display.c
>> index 404bb1dc2..7ff55ef24 100644
>> --- a/hw/xfree86/drivers/modesetting/drmmode_display.c
>> +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
>> @@ -1636,48 +1636,37 @@ static xf86OutputPtr find_output(ScrnInfoPtr pScrn, 
>> int id)
>>  return NULL;
>>  }
>>
>> -static int parse_path_blob(drmModePropertyBlobPtr path_blob, int 
>> *conn_base_id, char **path)
>> +static Bool
>> +parse_path_blob(drmModePropertyBlobPtr path_blob,
>> +int *conn_base_id, char **extra_path)
>>  {
>> -char *conn;
>> -char conn_id[5];
>> -int id, len;
>> -char *blob_data;
>> +char *colon, *dash;
>>
>>  if (!path_blob)
>> -return -1;
>> +return FALSE;
>>
>> -blob_data = path_blob->data;
>> -/* we only handle MST paths for now */
>> -if (strncmp(blob_data, "mst:", 4))
>> -return -1;
>> +colon = strchr(path_blob->data, ':');
>> +dash = strchr(path_blob->data, '-');
>>
> Won't the removal of "mst" cause false positives - surely there are
> !MST blobs, right?
> If it's safe a comment will help a lot.

Yes, this property blob is always prefixed with "mst:" and I've added
a comment to the code.
(By skipping the prefix check, we are safe for the future, i.e. if the
prefix becomes mst3k. ;) )

>> -conn = strchr(blob_data + 4, '-');
>> -if (!conn)
>> -return -1;
>> -len = conn - (blob_data + 4);
>> -if (len + 1> 5)
>> -return -1;
>> -memcpy(conn_id, blob_data + 4, len);
>> -conn_id[len + 1] = '\0';
>> -id = strtoul(conn_id, NULL, 10);
>> +if (colon && dash) {
>> +*conn_base_id = strtoul(colon + 1, NULL, 10);
>> +*extra_path = dash + 1;
>>
>> -*conn_base_id = id;
>> +return TRUE;
>> +}
>>
>> -*path = conn + 1;
>> -return 0;
>> +return FALSE;
>>  }
>>
>>  static void
>>  drmmode_create_name(ScrnInfoPtr pScrn, drmModeConnectorPtr koutput, char 
>> *name,
>> -   drmModePropertyBlobPtr path_blob)
>> +drmModePropertyBlobPtr path_blob)
> Unrelated whitespace change.
>
>>  {
>> -int ret;
>>  char *extra_path;
>>  int conn_id;
>>  xf86OutputPtr output;
>>
>> -ret = parse_path_blob(path_blob, &conn_id, &extra_path);
>> -if (ret == -1)
>> +if (!parse_path_blob(path_blob, &conn_id, &extra_path))
> The function name doesn't imply a boolean return value, so I'd stick with int.

I've reverted the unnecessary changes.
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel

Re: [PATCH xserver 03/11] modesetting: Simplify mst path blob parsing

2017-11-07 Thread Emil Velikov
On 7 November 2017 at 09:38, Daniel Martin  wrote:
> The kernel guarantees that the MST path property blob of a connector
> has a certain format and this property is immutable - can't be changed
> from user space. With that in mind, reduce the parsing code to a minimum
> matching the format criteria.
>
> (Preparation to fold the parsing into output name creation function.)
>
> Signed-off-by: Daniel Martin 
> ---
>  hw/xfree86/drivers/modesetting/drmmode_display.c | 41 
> +---
>  1 file changed, 15 insertions(+), 26 deletions(-)
>
> diff --git a/hw/xfree86/drivers/modesetting/drmmode_display.c 
> b/hw/xfree86/drivers/modesetting/drmmode_display.c
> index 404bb1dc2..7ff55ef24 100644
> --- a/hw/xfree86/drivers/modesetting/drmmode_display.c
> +++ b/hw/xfree86/drivers/modesetting/drmmode_display.c
> @@ -1636,48 +1636,37 @@ static xf86OutputPtr find_output(ScrnInfoPtr pScrn, 
> int id)
>  return NULL;
>  }
>
> -static int parse_path_blob(drmModePropertyBlobPtr path_blob, int 
> *conn_base_id, char **path)
> +static Bool
> +parse_path_blob(drmModePropertyBlobPtr path_blob,
> +int *conn_base_id, char **extra_path)
>  {
> -char *conn;
> -char conn_id[5];
> -int id, len;
> -char *blob_data;
> +char *colon, *dash;
>
>  if (!path_blob)
> -return -1;
> +return FALSE;
>
> -blob_data = path_blob->data;
> -/* we only handle MST paths for now */
> -if (strncmp(blob_data, "mst:", 4))
> -return -1;
> +colon = strchr(path_blob->data, ':');
> +dash = strchr(path_blob->data, '-');
>
Won't the removal of "mst" cause false positives - surely there are
!MST blobs, right?
If it's safe a comment will help a lot.

> -conn = strchr(blob_data + 4, '-');
> -if (!conn)
> -return -1;
> -len = conn - (blob_data + 4);
> -if (len + 1> 5)
> -return -1;
> -memcpy(conn_id, blob_data + 4, len);
> -conn_id[len + 1] = '\0';
> -id = strtoul(conn_id, NULL, 10);
> +if (colon && dash) {
> +*conn_base_id = strtoul(colon + 1, NULL, 10);
> +*extra_path = dash + 1;
>
> -*conn_base_id = id;
> +return TRUE;
> +}
>
> -*path = conn + 1;
> -return 0;
> +return FALSE;
>  }
>
>  static void
>  drmmode_create_name(ScrnInfoPtr pScrn, drmModeConnectorPtr koutput, char 
> *name,
> -   drmModePropertyBlobPtr path_blob)
> +drmModePropertyBlobPtr path_blob)
Unrelated whitespace change.

>  {
> -int ret;
>  char *extra_path;
>  int conn_id;
>  xf86OutputPtr output;
>
> -ret = parse_path_blob(path_blob, &conn_id, &extra_path);
> -if (ret == -1)
> +if (!parse_path_blob(path_blob, &conn_id, &extra_path))
The function name doesn't imply a boolean return value, so I'd stick with int.

-Emli
___
xorg-devel@lists.x.org: X.Org development
Archives: http://lists.x.org/archives/xorg-devel
Info: https://lists.x.org/mailman/listinfo/xorg-devel