} else if(safe_str_eq(op, "running")) {
} else if(safe_str_eq(op, "colocated")) {
match_attrs(const char *attr, const char *op, const char *value,	    const char *type, GListPtr node_list){	GListPtr result = NULL;		if(attr == NULL || op == NULL) {		crm_err("Invlaid attribute or operation in expression"			" (\'%s\' \'%s\' \'%s\')",			crm_str(attr), crm_str(op), crm_str(value));		return NULL;	}		slist_iter(		node, node_t, node_list, lpc,		gboolean accept = FALSE;				int cmp = 0;		const char *h_val = (const char*)g_hash_table_lookup(			node->details->attrs, attr);		if(value != NULL && h_val != NULL) {			if(type == NULL || (safe_str_eq(type, "string"))) {				cmp = strcmp(h_val, value);			} else if(safe_str_eq(type, "number")) {				float h_val_f = atof(h_val);				float value_f = atof(value);				if(h_val_f < value_f) {					cmp = -1;				} else if(h_val_f > value_f)  {					cmp = 1;				} else {					cmp = 0;				}							} else if(safe_str_eq(type, "version")) {				cmp = compare_version(h_val, value);			}					} else if(value == NULL && h_val == NULL) {			cmp = 0;		} else if(value == NULL) {			cmp = 1;		} else {			cmp = -1;		}				if(safe_str_eq(op, "exists")) {			if(h_val != NULL) accept = TRUE;			} else if(safe_str_eq(op, "not_exists")) {			if(h_val == NULL) accept = TRUE;		} else if(safe_str_eq(op, "running")) {			GListPtr rsc_list = node->details->running_rsc;			slist_iter(				rsc, resource_t, rsc_list, lpc2,				if(safe_str_eq(rsc->id, attr)) {					accept = TRUE;				}				);		} else if(safe_str_eq(op, "not_running")) {			GListPtr rsc_list = node->details->running_rsc;			accept = TRUE;			slist_iter(				rsc, resource_t, rsc_list, lpc2,				if(safe_str_eq(rsc->id, attr)) {					accept = FALSE;					break;				}				);		} else if(safe_str_eq(op, "eq")) {			if((h_val == value) || cmp == 0)				accept = TRUE;		} else if(safe_str_eq(op, "ne")) {			if((h_val == NULL && value != NULL)			   || (h_val != NULL && value == NULL)			   || cmp != 0)				accept = TRUE;		} else if(value == NULL || h_val == NULL) {			/* the comparision is meaningless from this point on */			accept = FALSE;					} else if(safe_str_eq(op, "lt")) {			if(cmp < 0) accept = TRUE;					} else if(safe_str_eq(op, "lte")) {			if(cmp <= 0) accept = TRUE;					} else if(safe_str_eq(op, "gt")) {			if(cmp > 0) accept = TRUE;					} else if(safe_str_eq(op, "gte")) {			if(cmp >= 0) accept = TRUE;					}				if(accept) {			crm_trace("node %s matched", node->details->uname);			result = g_list_append(result, node);		} else {			crm_trace("node %s did not match", node->details->uname);		}		   		);		return result;}