crm_free(revision);
crm_free(new_revision);
revision_check(crm_data_t *cib_update, crm_data_t *cib_copy, int flags){	enum cib_errors rc = cib_ok;	char *revision = crm_element_value_copy(		cib_update, XML_ATTR_CIB_REVISION);	const char *cur_revision = crm_element_value(		cib_copy, XML_ATTR_CIB_REVISION);	crm_validate_data(cib_update);	crm_validate_data(cib_copy);		if(revision == NULL) {		return cib_ok;	} else if(cur_revision == NULL		  || strcmp(revision, cur_revision) > 0) {		crm_info("Updating CIB revision to %s", revision);		crm_xml_add(			cib_copy, XML_ATTR_CIB_REVISION, revision);	} else {		/* make sure we end up with the right value in the end */		crm_xml_add(			cib_update, XML_ATTR_CIB_REVISION, cur_revision);	}		if(strcmp(revision, cib_feature_revision_s) > 0) {		CRM_DEV_ASSERT(cib_is_master == FALSE);		CRM_DEV_ASSERT((flags & cib_scope_local) == 0);		if(cib_is_master) {			crm_err("Update uses an unsupported tag/feature:"				" %s vs %s",				revision, cib_feature_revision_s);			rc = cib_revision_unsupported;		} else if(flags & cib_scope_local) {			 /* an admin has forced a local change using a tag we			  * dont understand... ERROR			  */			crm_err("Local update uses an unsupported tag/feature:"				" %s vs %s",				revision, cib_feature_revision_s);			rc = cib_revision_unsupported;		}	}		crm_free(revision);	return rc;}