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); }
int __bro_id_cmp(BroID *id1, BroID *id2) { D_ENTER; if (! id1 || ! id2) D_RETURN_(FALSE); D_RETURN_(__bro_ht_str_cmp(id1->name.str_val, id2->name.str_val)); }