log_level, depth+1, a_child, formatted);
function, log_level, depth+1, a_child, formatted);
log_data_element(	int log_level, int depth, crm_data_t *data, gboolean formatted) {	int printed = 0;	int child_result = 0;	int has_children = 0;	char print_buffer[1000];	char *buffer = print_buffer;	const char *name = crm_element_name(data);	crm_insane("Dumping %s...", name);	if(data == NULL) {		crm_warn("No data to dump as XML");		return 0;	} else if(name == NULL && depth == 0) {		xml_child_iter(			data, a_child, NULL,			child_result = log_data_element(				log_level, depth, a_child, formatted);			if(child_result < 0) {				return child_result;			}			);		return 0;	} else if(name == NULL) {		crm_err("Cannot dump NULL element at depth %d", depth);		return -1;	}		if(formatted) {		printed = print_spaces(buffer, depth);		update_buffer_head(buffer, printed);	}		printed = sprintf(buffer, "<%s", name);	update_buffer_head(buffer, printed);	xml_prop_iter(		data, prop_name, prop_value,		if(safe_str_eq(XML_ATTR_TAGNAME, prop_name)) {			continue;		} else if(safe_str_eq(XML_ATTR_PARENT, prop_name)) {			continue;		}				crm_insane("Dumping <%s %s=\"%s\"...",			  name, prop_name, prop_value);		printed = sprintf(buffer, " %s=\"%s\"", prop_name, prop_value);		update_buffer_head(buffer, printed);		);	xml_child_iter(		data, child, NULL,		if(child != NULL) {			has_children++;			break;		}		);	printed = sprintf(buffer, "%s>", has_children==0?"/":"");	update_buffer_head(buffer, printed);	do_crm_log(log_level,  __FUNCTION__, NULL, "%s", print_buffer);	buffer = print_buffer;		if(has_children == 0) {		return 0;	}		xml_child_iter(		data, a_child, NULL,		child_result = log_data_element(			log_level, depth+1, a_child, formatted);		if(child_result < 0) { return -1; }		);	if(formatted) {		printed = print_spaces(buffer, depth);		update_buffer_head(buffer, printed);	}	do_crm_log(log_level,  __FUNCTION__, NULL, "%s</%s>",		   print_buffer, name);	crm_insane("Dumped %s...", name);	return has_children;}