.\"
.\" written by Andrew Main <zefram@dcs.warwick.ac.uk>
.\"
.TH CAP_INIT 3 "2008-05-11" "" "Linux Programmer's Manual"
.SH NAME
cap_init, cap_free, cap_dup \- capability data object storage management
.SH SYNOPSIS
.B #include <sys/capability.h>
.sp
.B cap_t cap_init(void);
.sp
.BI "int cap_free(void *" obj_d );
.sp
.BI "cap_t cap_dup(cap_t " cap_p );
.sp
Link with \fI\-lcap\fP.
.SH DESCRIPTION
The capabilities associated with a file or process are never edited
directly.  Instead, working storage is allocated to contain a
representation of the capability state.  Capabilities are edited and
manipulated only within this working storage area.  Once editing of
the capability state is complete, the updated capability state is used
to replace the capability state associated with the file or process.
.PP
.BR cap_init ()
creates a capability state in working storage and returns a pointer to
the capability state.  The initial value of all flags are cleared.  The
caller should free any releasable memory, when the capability state in
working storage is no longer required, by calling
.BR cap_free ()
with the 
.I cap_t
as an argument.
.PP
.BR cap_free ()
liberates any releasable memory that has been allocated to the
capability state identified by
.IR obj_d .
The
.I obj_d
argument may identify either a
.I cap_t
entity, or a
.I "char\ *"
entity allocated by the
.BR cap_to_text ()
function.
.PP
.BR cap_dup ()
returns a duplicate capability state in working storage given by the
source object
.IR cap_p , 
allocating any memory necessary, and returning a
pointer to the newly created capability state.  Once duplicated, no
operation on either capability state affects the other in any way.
When the duplicated capability state in working storage is no longer required,
the caller should free any releasable memory by calling
.BR cap_free ()
with the 
.I cap_t
as an argument.
.SH "RETURN VALUE"
.BR cap_init ()
and
.BR cap_dup ()
return a non-NULL value on success, and NULL on failure.
.PP
.BR cap_free ()
returns zero on success, and \-1 on failure.
.PP
On failure,
.I errno
is set to
.BR EINVAL
or
.BR ENOMEM .
.SH "CONFORMING TO"
These functions are specified in the withdrawn POSIX.1e draft specification.
.SH "SEE ALSO"
.BR libcap (3),
.BR cap_clear (3),
.BR cap_copy_ext (3),
.BR cap_from_text (3),
.BR cap_get_file (3),
.BR cap_get_proc (3),
.BR capabilities (7)
