static int __bro_list_val_cmp(BroListVal *lv1, BroListVal *lv2) { BroList *l1, *l2; D_ENTER; if (! lv1 || ! lv2) D_RETURN_(FALSE); if (lv1->len != lv2->len || lv1->type_tag != lv2->type_tag) D_RETURN_(FALSE); for (l1 = lv1->list, l2 = lv2->list; l1 && l2; l1 = __bro_list_next(l1), l2 = __bro_list_next(l2)) { if (! __bro_sobject_cmp((BroSObject*) __bro_list_data(l1), (BroSObject*) __bro_list_data(l2))) D_RETURN_(FALSE); } if (l1 || l2) { D(("WARNING -- list length inconsistency.\n")); D_RETURN_(FALSE); } D_RETURN_(TRUE); }
static int __bro_val_cmp(BroVal *val1, BroVal *val2) { int i; D_ENTER; if (! val1 || ! val2) D_RETURN_(FALSE); if (! __bro_sobject_cmp((BroSObject*) val1->val_type, (BroSObject*) val2->val_type)) D_RETURN_(FALSE); switch (val1->val_type->internal_tag) { case BRO_INTTYPE_INT: case BRO_INTTYPE_UNSIGNED: if (val1->val_int64 != val2->val_int64) D_RETURN_(FALSE); break; case BRO_INTTYPE_IPADDR: for (i = 3; i >= 0; --i) if (val1->val_addr.addr[i] != val2->val_addr.addr[i]) D_RETURN_(FALSE); break; case BRO_INTTYPE_DOUBLE: if (val1->val_double != val2->val_double) D_RETURN_(FALSE); break; case BRO_INTTYPE_STRING: if (! __bro_ht_str_cmp(val1->val_str.str_val, val2->val_str.str_val)) D_RETURN_(FALSE); break; case BRO_INTTYPE_SUBNET: for (i = 3; i >= 0; --i) if (val1->val_subnet.sn_net.addr[i] != val2->val_subnet.sn_net.addr[i]) D_RETURN_(FALSE); if (val1->val_subnet.sn_width != val2->val_subnet.sn_width) D_RETURN_(FALSE); break; case BRO_INTTYPE_OTHER: D(("WARNING -- __bro_val_cmp() invoked on derived type.\n")); break; default: D(("Unknown internal type tag: %i\n", val1->val_type->internal_tag)); break; } D_RETURN_(TRUE); }
static int __bro_table_val_cmp(BroTableVal *tv1, BroTableVal *tv2) { D_ENTER; if (! tv1 || ! tv2) D_RETURN_(FALSE); if (! __bro_sobject_cmp((BroSObject*) tv1->table_type, (BroSObject*) tv2->table_type)) D_RETURN_(FALSE); if (! __bro_table_cmp(tv1->table, tv2->table)) D_RETURN_(FALSE); D_RETURN_(TRUE); }
int __bro_vector_cmp(BroVector *vec1, BroVector *vec2) { int i; if ( ! vec1 || ! vec2 ) D_RETURN_(FALSE); if ( vec1->length != vec2->length ) D_RETURN_(FALSE); for ( i = 0; i < vec1->length; ++i ) if ( ! __bro_sobject_cmp((BroSObject*) vec1->vector[i], (BroSObject*) vec2->vector[i]) ) D_RETURN_(FALSE); D_RETURN_(TRUE); }