crm_debug_2("\t%s: %s->%s", 
crm_debug_4("\t%s: %s->%s", 
subtract_xml_object(crm_data_t *left, crm_data_t *right, gboolean suppress){	gboolean skip = FALSE;	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;	int lpc = 0;	const char *filter[] = {		XML_ATTR_TSTAMP,		"last_written",		"debug_source",		"origin"	};	if(left == NULL) {		return NULL;	} else if(right == NULL) {		crm_debug_2("Processing <%s id=%s> (complete copy)",			    crm_element_name(left), ID(left));		return copy_xml(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 */	crm_debug_2("Processing <%s id=%s>", crm_str(name), ID(left));	xml_prop_iter(left, prop_name, left_value,		      skip = FALSE;		      if(safe_str_eq(prop_name, XML_ATTR_ID)) {			      skip = TRUE;		      }		      for(lpc = 0;			  skip == FALSE && suppress && lpc < DIMOF(filter);			  lpc++) {			      if(safe_str_eq(prop_name, filter[lpc])) {				      skip = TRUE;			      }		      }		      		      if(skip) { continue; }		      		      right_val = crm_element_value(right, prop_name);		      if(right_val == NULL) {			      differences = TRUE;			      crm_xml_add(diff, prop_name, left_value);			      crm_debug_3("\t%s: %s", crm_str(prop_name),					  crm_str(left_value));				      		      } else if(safe_str_eq(left_value, right_val)) {			      crm_debug_2("\t%s: %s (removed)",					  crm_str(prop_name),					  crm_str(left_value));		      } else {			      differences = TRUE;			      crm_xml_add(diff, prop_name, left_value);			      crm_debug_2("\t%s: %s->%s",					  crm_str(prop_name),					  crm_str(left_value),					  right_val);		      }		);	/* 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, suppress);		if(child_diff != NULL) {			differences = TRUE;			add_node_copy(diff, child_diff);			free_xml(child_diff);		}		);		if(differences == FALSE) {		free_xml(diff);		crm_debug_2("\tNo changes");		return NULL;	}	crm_xml_add(diff, XML_ATTR_ID, ID(left));	return diff;}
8182	/local/tlutelli/issta_data/temp/c/2005_temp/2005/8182/0ec4f996b1877187f98669cb3402fdf1274aa583/xml.c/clean/lib/crm/common/xml.c