cap_init, cap_free, cap_dup - capability data object storage management
int cap_free(void *obj_d);
cap_t cap_dup(cap_t cap_p);
cc ... -lcap
The capabilities associated with a file or process are never edited
directly. Instead, working storage is allocated to contain a represen-
tation of the capability state. Capabilities are edited and manipu-
lated only within this working storage area. Once editing of the capa-
bility state is complete, the updated capability state is used to
replace the capability state associated with the file or process.
cap_init creates a capability state in working storage and return a
pointer to the capability state. The initial value of all flags are
cleared. The caller should free any releasable memory, when the capa-
bility state in working storage is no longer required, by calling
cap_free with the cap_t as an argument.
cap_free liberates any releasable memory that has been allocated to the
capability state identified by obj_d. The obj_d argument may identify
either a cap_t entity, or a char * entity allocated by the cap_to_text
cap_dup returns a duplicate capability state in working storage given
by the source object cap_p, allocating any memory necessary, and
returning a pointer to the newly created capability state. Once dupli-
cated, no operation on either capability state affects the other in any
cap_init and cap_dup return a non-NULL value on success, and NULL on
cap_free returns zero on success, and -1 on failure.
On failure, errno(3) is set to EINVAL, or ENOMEM.
These functions are specified by POSIX.1e.
cap_clear(3), cap_copy_ext(3), cap_from_text(3), cap_get_file(3),