diff --git a/include/capability.h b/include/capability.h index 28963ea6..96f222ca 100644 --- a/include/capability.h +++ b/include/capability.h @@ -31,4 +31,6 @@ extern void capability_orphan(struct CapabilityIndex *index, const char *cap); extern struct CapabilityIndex *capability_index_create(void); extern void capability_index_destroy(struct CapabilityIndex *); +extern const char *capability_index_list(struct CapabilityIndex *, unsigned int capability_mask); + #endif diff --git a/src/capability.c b/src/capability.c index 9a14bb0b..c61c006c 100644 --- a/src/capability.c +++ b/src/capability.c @@ -114,3 +114,31 @@ capability_index_destroy(struct CapabilityIndex *index) irc_dictionary_destroy(index->cap_dict, capability_destroy, NULL); rb_free(index); } + +const char * +capability_index_list(struct CapabilityIndex *index, unsigned int cap_mask) +{ + struct DictionaryIter iter; + struct CapabilityEntry *entry; + static char buf[BUFSIZE]; + char *t = buf; + int tl; + + s_assert(index != NULL); + + *t = '\0'; + + DICTIONARY_FOREACH(entry, &iter, index->cap_dict) + { + if (entry->value & cap_mask) + { + tl = rb_sprintf(t, "%s ", iter.cur->key); + t += tl; + } + } + + t--; + *t = '\0'; + + return buf; +}