X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/56f84dedf7532478b524aa3cdfca5175b20442fd..8e1bdeda92e1414e312406e7169caf40ad48308b:/ircd/capability.c diff --git a/ircd/capability.c b/ircd/capability.c index e818d919..e82143e5 100644 --- a/ircd/capability.c +++ b/ircd/capability.c @@ -67,11 +67,16 @@ capability_put(struct CapabilityIndex *idx, const char *cap, void *ownerdata) if ((entry = rb_dictionary_retrieve(idx->cap_dict, cap)) != NULL) { entry->flags &= ~CAP_ORPHANED; + if (ownerdata != NULL) + { + s_assert(entry->ownerdata == NULL); + entry->ownerdata = ownerdata; + } return (1 << entry->value); } entry = rb_malloc(sizeof(struct CapabilityEntry)); - entry->cap = cap; + entry->cap = rb_strdup(cap); entry->flags = 0; entry->value = idx->highest_bit; entry->ownerdata = ownerdata; @@ -129,11 +134,13 @@ capability_require(struct CapabilityIndex *idx, const char *cap) } static void -capability_destroy(struct DictionaryElement *delem, void *privdata) +capability_destroy(rb_dictionary_element *delem, void *privdata) { s_assert(delem != NULL); - rb_free(delem->data); + struct CapabilityEntry *entry = delem->data; + rb_free((char *)entry->cap); + rb_free(entry); } struct CapabilityIndex * @@ -143,7 +150,7 @@ capability_index_create(const char *name) idx = rb_malloc(sizeof(struct CapabilityIndex)); idx->name = name; - idx->cap_dict = rb_dictionary_create(name, strcasecmp); + idx->cap_dict = rb_dictionary_create(name, rb_strcasecmp); idx->highest_bit = 1; rb_dlinkAdd(idx, &idx->node, &capability_indexes); @@ -165,7 +172,7 @@ capability_index_destroy(struct CapabilityIndex *idx) const char * capability_index_list(struct CapabilityIndex *idx, unsigned int cap_mask) { - struct DictionaryIter iter; + rb_dictionary_iter iter; struct CapabilityEntry *entry; static char buf[BUFSIZE]; char *t = buf; @@ -193,7 +200,7 @@ capability_index_list(struct CapabilityIndex *idx, unsigned int cap_mask) unsigned int capability_index_mask(struct CapabilityIndex *idx) { - struct DictionaryIter iter; + rb_dictionary_iter iter; struct CapabilityEntry *entry; unsigned int mask = 0; @@ -211,7 +218,7 @@ capability_index_mask(struct CapabilityIndex *idx) unsigned int capability_index_get_required(struct CapabilityIndex *idx) { - struct DictionaryIter iter; + rb_dictionary_iter iter; struct CapabilityEntry *entry; unsigned int mask = 0; @@ -235,7 +242,7 @@ capability_index_stats(void (*cb)(const char *line, void *privdata), void *privd RB_DLINK_FOREACH(node, capability_indexes.head) { struct CapabilityIndex *idx = node->data; - struct DictionaryIter iter; + rb_dictionary_iter iter; struct CapabilityEntry *entry; snprintf(buf, sizeof buf, "'%s': allocated bits - %d", idx->name, (idx->highest_bit - 1));