]> jfr.im git - solanum.git/commitdiff
capability: add capability_index_list() to build a list of capabilities given an...
authorWilliam Pitcock <redacted>
Sat, 4 Feb 2012 06:36:42 +0000 (00:36 -0600)
committerWilliam Pitcock <redacted>
Sat, 4 Feb 2012 06:36:42 +0000 (00:36 -0600)
include/capability.h
src/capability.c

index 28963ea6a0ab8821354ad5659cd3ff04eb646c7d..96f222cad2e223d33be3085bb451ce4ffc35c5b6 100644 (file)
@@ -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
index 9a14bb0b1a4283737180dae23da045d881e1bab1..c61c006c6b76ed2303060e749c7bda21e41d44aa 100644 (file)
@@ -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;
+}