capability: add capability_index_list() to build a list of capabilities given an index and mask

This commit is contained in:
William Pitcock 2012-02-04 00:36:42 -06:00
parent 64b56afd8c
commit 5e773521a9
2 changed files with 30 additions and 0 deletions

View file

@ -31,4 +31,6 @@ extern void capability_orphan(struct CapabilityIndex *index, const char *cap);
extern struct CapabilityIndex *capability_index_create(void); extern struct CapabilityIndex *capability_index_create(void);
extern void capability_index_destroy(struct CapabilityIndex *); extern void capability_index_destroy(struct CapabilityIndex *);
extern const char *capability_index_list(struct CapabilityIndex *, unsigned int capability_mask);
#endif #endif

View file

@ -114,3 +114,31 @@ capability_index_destroy(struct CapabilityIndex *index)
irc_dictionary_destroy(index->cap_dict, capability_destroy, NULL); irc_dictionary_destroy(index->cap_dict, capability_destroy, NULL);
rb_free(index); 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;
}