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

Hans de Goede hdegoede at redhat.com
Fri Mar 7 02:22:33 PST 2014


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>
---
 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



More information about the xorg-devel mailing list