[PATCH 1/2] config_odev_add*_attribute: Don't add the attribute to the list twice

Peter Hutterer peter.hutterer at who-t.net
Sun Mar 9 23:12:21 PDT 2014


On Fri, Mar 07, 2014 at 11:22:33AM +0100, Hans de Goede wrote:
> Don't do the xorg_list_append a 2nd time when updating existing attributes,
> while at it add a helper function for this to avoid code duplication.
> 
> Signed-off-by: Hans de Goede <hdegoede at redhat.com>

Reviewed-by: Peter Hutterer <peter.hutterer at who-t.net>

Cheers,
   Peter

> ---
>  config/config.c | 31 +++++++++++++++++++++----------
>  1 file changed, 21 insertions(+), 10 deletions(-)
> 
> diff --git a/config/config.c b/config/config.c
> index 7971b87..530f21d 100644
> --- a/config/config.c
> +++ b/config/config.c
> @@ -159,23 +159,38 @@ config_odev_find_attribute(struct OdevAttributes *attribs, int attrib_id)
>      return NULL;
>  }
>  
> +static struct OdevAttribute *
> +config_odev_find_or_add_attribute(struct OdevAttributes *attribs, int attrib)
> +{
> +    struct OdevAttribute *oa;
> +
> +    oa = config_odev_find_attribute(attribs, attrib);
> +    if (oa)
> +        return oa;
> +
> +    oa = calloc(1, sizeof(struct OdevAttribute));
> +    if (!oa)
> +        return oa;
> +
> +    oa->attrib_id = attrib;
> +    xorg_list_append(&oa->member, &attribs->list);
> +
> +    return oa;
> +}
> +
>  Bool
>  config_odev_add_attribute(struct OdevAttributes *attribs, int attrib,
>                            const char *attrib_name)
>  {
>      struct OdevAttribute *oa;
>  
> -    oa = config_odev_find_attribute(attribs, attrib);
> -    if (!oa)
> -        oa = calloc(1, sizeof(struct OdevAttribute));
> +    oa = config_odev_find_or_add_attribute(attribs, attrib);
>      if (!oa)
>          return FALSE;
>  
> -    oa->attrib_id = attrib;
>      free(oa->attrib_name);
>      oa->attrib_name = strdup(attrib_name);
>      oa->attrib_type = ODEV_ATTRIB_STRING;
> -    xorg_list_append(&oa->member, &attribs->list);
>      return TRUE;
>  }
>  
> @@ -185,16 +200,12 @@ config_odev_add_int_attribute(struct OdevAttributes *attribs, int attrib,
>  {
>      struct OdevAttribute *oa;
>  
> -    oa = config_odev_find_attribute(attribs, attrib);
> -    if (!oa)
> -        oa = calloc(1, sizeof(struct OdevAttribute));
> +    oa = config_odev_find_or_add_attribute(attribs, attrib);
>      if (!oa)
>          return FALSE;
>  
> -    oa->attrib_id = attrib;
>      oa->attrib_value = attrib_value;
>      oa->attrib_type = ODEV_ATTRIB_INT;
> -    xorg_list_append(&oa->member, &attribs->list);
>      return TRUE;
>  }
>  
> -- 
> 1.9.0
> 
> _______________________________________________
> xorg-devel at lists.x.org: X.Org development
> Archives: http://lists.x.org/archives/xorg-devel
> Info: http://lists.x.org/mailman/listinfo/xorg-devel
> 


More information about the xorg-devel mailing list