From 885cd603b516c533dcf6788d684a5189fe1b15ef Mon Sep 17 00:00:00 2001 From: William Pitcock Date: Sat, 4 Feb 2012 21:16:40 -0600 Subject: [PATCH] capability: add global list of capability indexes, and name all capability indexes --- include/capability.h | 2 +- src/capability.c | 11 ++++++++++- src/s_serv.c | 2 +- 3 files changed, 12 insertions(+), 3 deletions(-) diff --git a/include/capability.h b/include/capability.h index 5014bdd5b..757b61fa7 100644 --- a/include/capability.h +++ b/include/capability.h @@ -29,7 +29,7 @@ extern unsigned int capability_put(struct CapabilityIndex *idx, const char *cap) extern void capability_orphan(struct CapabilityIndex *idx, const char *cap); extern void capability_require(struct CapabilityIndex *idx, const char *cap); -extern struct CapabilityIndex *capability_index_create(void); +extern struct CapabilityIndex *capability_index_create(const char *name); extern void capability_index_destroy(struct CapabilityIndex *); extern const char *capability_index_list(struct CapabilityIndex *, unsigned int capability_mask); extern unsigned int capability_index_mask(struct CapabilityIndex *); diff --git a/src/capability.c b/src/capability.c index 0cfd4ec32..c4236cb26 100644 --- a/src/capability.c +++ b/src/capability.c @@ -22,9 +22,13 @@ #include "capability.h" #include "irc_dictionary.h" +static rb_dlink_list capability_indexes = { NULL, NULL, 0 }; + struct CapabilityIndex { + char *name; struct Dictionary *cap_dict; unsigned int highest_bit; + rb_dlink_node node; }; #define CAP_ORPHANED 0x1 @@ -115,14 +119,17 @@ capability_destroy(struct DictionaryElement *delem, void *privdata) } struct CapabilityIndex * -capability_index_create(void) +capability_index_create(const char *name) { struct CapabilityIndex *idx; idx = rb_malloc(sizeof(struct CapabilityIndex)); + idx->name = rb_strdup(name); idx->cap_dict = irc_dictionary_create(strcasecmp); idx->highest_bit = 1; + rb_dlinkAdd(idx, &idx->node, &capability_indexes); + return idx; } @@ -131,6 +138,8 @@ capability_index_destroy(struct CapabilityIndex *idx) { s_assert(idx != NULL); + rb_dlinkDelete(&idx->node, &capability_indexes); + irc_dictionary_destroy(idx->cap_dict, capability_destroy, NULL); rb_free(idx); } diff --git a/src/s_serv.c b/src/s_serv.c index 311d3a6df..784be844b 100644 --- a/src/s_serv.c +++ b/src/s_serv.c @@ -100,7 +100,7 @@ unsigned int CAP_MLOCK; void init_builtin_capabs(void) { - serv_capindex = capability_index_create(); + serv_capindex = capability_index_create("server capabilities"); CAP_QS = capability_put(serv_capindex, "QS"); CAP_EX = capability_put(serv_capindex, "EX");