xmlNodePtr node_match = attr_exp->children; gboolean accept = TRUE;
gboolean accept = FALSE;
match_attrs(xmlNodePtr attr_exp, GListPtr node_list){	int lpc = 0;	GListPtr result = NULL;	slist_iter(		node, node_t, node_list, lpc,		xmlNodePtr node_match = attr_exp->children;		gboolean accept = TRUE;				while(accept && node_match != NULL) {			const char *type = xmlGetProp(				node_match, XML_ATTR_TYPE);			const char *value= xmlGetProp(				node_match, XML_NVPAIR_ATTR_VALUE);			const char *name = xmlGetProp(node_match, "target");			node_match = node_match->next;						if(name == NULL || type == NULL) {				crm_err("Attribute %s (%s) was invalid",					  name, type);				continue;			}						const char *h_val = (const char*)				g_hash_table_lookup(node->details->attrs,name);						if(h_val != NULL && safe_str_eq(type, "has_attr")){				accept = TRUE;							} else if(h_val==NULL && safe_str_eq(type,"not_attr")){				accept = TRUE;							} else if(h_val != NULL				  && safe_str_eq(type, "attr_value")				  && safe_str_eq(h_val, value)) {				accept = TRUE;							} else {				accept = FALSE;			}		}				if(accept) {			result = g_list_append(result, node);		}		   		);		return result;}