+int zebra_rec_keys_add_hash(zebra_rec_keys_t keys,
+ const char *str, size_t slen,
+ const struct it_key *key)
+{
+ struct zebra_rec_key_entry **kep = zebra_rec_keys_mk_hash(keys, str, slen);
+ while (*kep)
+ {
+ struct zebra_rec_key_entry *e = *kep;
+ if (slen == e->len && !memcmp(str, e->buf, slen) &&
+ !key_compare(key, &e->key))
+ {
+ return 0;
+ }
+ kep = &(*kep)->next;
+ }
+ *kep = nmem_malloc(keys->nmem, sizeof(**kep));
+ (*kep)->next = 0;
+ (*kep)->len = slen;
+ memcpy(&(*kep)->key, key, sizeof(*key));
+ (*kep)->buf = nmem_malloc(keys->nmem, slen);
+ memcpy((*kep)->buf, str, slen);
+ return 1;
+}
+