]> jfr.im git - solanum.git/commitdiff
capability: add capability_index_stats() for getting statistics about the capability...
authorWilliam Pitcock <redacted>
Sun, 5 Feb 2012 03:27:43 +0000 (21:27 -0600)
committerWilliam Pitcock <redacted>
Sun, 5 Feb 2012 03:27:43 +0000 (21:27 -0600)
include/capability.h
src/capability.c

index 757b61fa7327e0ef6787e8f054421ff1d584ba80..c3caec8d2b959fc9adfbc110208382a6ace7ddd8 100644 (file)
@@ -34,5 +34,6 @@ 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 *);
 extern unsigned int capability_index_get_required(struct CapabilityIndex *);
+extern void capability_index_stats(void (*cb)(const char *line, void *privdata), void *privdata);
 
 #endif
index c4236cb268dc189b6d33c96b4d1bf0291d6532fe..9906db0da554747bd1bf409747e91f9ef81588eb 100644 (file)
@@ -207,3 +207,33 @@ capability_index_get_required(struct CapabilityIndex *idx)
 
        return mask;
 }
+
+void
+capability_index_stats(void (*cb)(const char *line, void *privdata), void *privdata)
+{
+       rb_dlink_node *node;
+       char buf[BUFSIZE];
+
+       RB_DLINK_FOREACH(node, capability_indexes.head)
+       {
+               struct CapabilityIndex *idx = node->data;
+               struct DictionaryIter iter;
+               struct CapabilityEntry *entry;
+
+               rb_snprintf(buf, sizeof buf, "'%s': allocated bits - %d", idx->name, (idx->highest_bit - 1));
+               cb(buf, privdata);
+
+               DICTIONARY_FOREACH(entry, &iter, idx->cap_dict)
+               {
+                       rb_snprintf(buf, sizeof buf, "bit %d: '%s'", entry->value, entry->cap);
+                       cb(buf, privdata);
+               }
+
+               rb_snprintf(buf, sizeof buf, "'%s': remaining bits - %ld", idx->name,
+                           (sizeof(unsigned int) * 8) - (idx->highest_bit - 1));
+               cb(buf, privdata);
+       }
+
+       rb_snprintf(buf, sizeof buf, "%ld capability indexes", rb_dlink_list_length(&capability_indexes));
+       cb(buf, privdata);
+}