X-Git-Url: https://jfr.im/git/solanum.git/blobdiff_plain/a16910aa4e95a18eff20842cd3516f8dd33dba8e..8b7503c89abf94300c96597bfb5718b4fd655e89:/include/capability.h diff --git a/include/capability.h b/include/capability.h index c3caec8d..76e58c97 100644 --- a/include/capability.h +++ b/include/capability.h @@ -21,11 +21,30 @@ #ifndef __CAPABILITY_H__ #define __CAPABILITY_H__ -struct CapabilityIndex; -struct CapabilityEntry; +#include "stdinc.h" +#include "rb_dictionary.h" -extern unsigned int capability_get(struct CapabilityIndex *idx, const char *cap); -extern unsigned int capability_put(struct CapabilityIndex *idx, const char *cap); +struct CapabilityIndex { + const char *name; + rb_dictionary *cap_dict; + unsigned int highest_bit; + rb_dlink_node node; +}; + +#define CAP_ORPHANED 0x1 +#define CAP_REQUIRED 0x2 + +struct CapabilityEntry { + const char *cap; + unsigned int value; + unsigned int flags; + void *ownerdata; +}; + +extern struct CapabilityEntry *capability_find(struct CapabilityIndex *idx, const char *cap); +extern unsigned int capability_get(struct CapabilityIndex *idx, const char *cap, void **ownerdata); +extern unsigned int capability_put(struct CapabilityIndex *idx, const char *cap, void *ownerdata); +extern unsigned int capability_put_anonymous(struct CapabilityIndex *idx); extern void capability_orphan(struct CapabilityIndex *idx, const char *cap); extern void capability_require(struct CapabilityIndex *idx, const char *cap);