File pacemaker-libcrmcommon-xml-find_element.patch of Package pacemaker.3577

commit a76b7974808db73d2d57bf4209631c00bf32c5c5
Author: Ken Gaillot <kgaillot@redhat.com>
Date:   Thu Jul 7 10:24:26 2016 -0500

    Refactor: libcrmcommon: functionize searching for XML element, whether comment or not
    
    Reduces code duplication and makes it harder to forget comment handling

diff --git a/lib/common/xml.c b/lib/common/xml.c
index 97eb2dd..11be300 100644
--- a/lib/common/xml.c
+++ b/lib/common/xml.c
@@ -1815,6 +1815,15 @@ xml_accept_changes(xmlNode * xml)
     __xml_accept_changes(top);
 }
 
+static xmlNode *
+find_element(xmlNode *haystack, xmlNode *needle)
+{
+    CRM_CHECK(needle != NULL, return NULL);
+    return (needle->type == XML_COMMENT_NODE)?
+           find_xml_comment(haystack, needle)
+           : find_entity(haystack, crm_element_name(needle), ID(needle));
+}
+
 /* Simplified version for applying v1-style XML patches */
 static void
 __subtract_xml_object(xmlNode * target, xmlNode * patch)
@@ -1867,14 +1876,7 @@ __subtract_xml_object(xmlNode * target, xmlNode * patch)
         xmlNode *target_child = cIter;
 
         cIter = __xml_next(cIter);
-
-        if (target_child->type == XML_COMMENT_NODE) {
-            patch_child = find_xml_comment(patch, target_child);
-
-        } else {
-            patch_child = find_entity(patch, crm_element_name(target_child), ID(target_child));
-        }
-
+        patch_child = find_element(patch, target_child);
         __subtract_xml_object(target_child, patch_child);
     }
     free(id);
@@ -1936,13 +1938,7 @@ __add_xml_object(xmlNode * parent, xmlNode * target, xmlNode * patch)
     for (patch_child = __xml_first_child(patch); patch_child != NULL;
          patch_child = __xml_next(patch_child)) {
 
-        if (patch_child->type == XML_COMMENT_NODE) {
-            target_child = find_xml_comment(target, patch_child);
-
-        } else {
-            target_child = find_entity(target, crm_element_name(patch_child), ID(patch_child));
-        }
-
+        target_child = find_element(target, patch_child);
         __add_xml_object(target, target_child, patch_child);
     }
 }
@@ -4595,13 +4591,7 @@ subtract_xml_object(xmlNode * parent, xmlNode * left, xmlNode * right,
          left_child = __xml_next(left_child)) {
         gboolean child_changed = FALSE;
 
-        if (left_child->type == XML_COMMENT_NODE) {
-            right_child = find_xml_comment(right, left_child);
-
-        } else {
-            right_child = find_entity(right, crm_element_name(left_child), ID(left_child));
-        }
-
+        right_child = find_element(right, left_child);
         subtract_xml_object(diff, left_child, right_child, full, &child_changed, marker);
         if (child_changed) {
             *changed = TRUE;
openSUSE Build Service is sponsored by