return copy_xml_node_recursive(left); 
crm_debug_2("Processing <%s id=%s> (complete copy)", crm_element_name(left), ID(left)); return copy_xml(left); 
subtract_xml_object(crm_data_t *left, crm_data_t *right){	gboolean differences = FALSE;	crm_data_t *diff = NULL;	crm_data_t *child_diff = NULL;	crm_data_t *right_child = NULL;	const char *right_val = NULL;	const char *name = NULL;	if(left == NULL) {		return NULL;	} else if(right == NULL) {		return copy_xml_node_recursive(left);	}		name = crm_element_name(left);	/* sanity check */	CRM_DEV_ASSERT(name != NULL);	if(crm_assert_failed) { return NULL; }	CRM_DEV_ASSERT(safe_str_eq(crm_element_name(left),				   crm_element_name(right)));	if(crm_assert_failed) { return NULL; }		CRM_DEV_ASSERT(safe_str_eq(ID(left), ID(right)));	if(crm_assert_failed) { return NULL; }		diff = create_xml_node(NULL, name);	/* changes to name/value pairs */	xml_prop_iter(left, prop_name, left_value,		      right_val = crm_element_value(right, prop_name);		      if(safe_str_neq(left_value, right_val)) {			      differences = TRUE;			      set_xml_property_copy(diff, prop_name, left_value);		      }		);	/* changes to child objects */	xml_child_iter(		left, left_child, NULL, 		right_child = find_entity(			right, crm_element_name(left_child), ID(left_child));		child_diff = subtract_xml_object(left_child, right_child);		if(child_diff != NULL) {			differences = TRUE;			add_node_copy(diff, child_diff);			free_xml(child_diff);		}		);		if(differences == FALSE) {		free_xml(diff);		return NULL;	}	set_xml_property_copy(diff, XML_ATTR_ID, ID(left));	return diff;}
8182	/local/tlutelli/issta_data/temp/c/2005_temp/2005/8182/e9ca1a541b7324ec9fa5a8c012f4140dca841e1e/xml.c/buggy/lib/crm/common/xml.c