SCF_VALUE_CREATE(3SCF)      Service Configuration Facility Library Functions
NAME
       scf_value_create, scf_value_handle, scf_value_reset,
       scf_value_destroy, scf_value_type, scf_value_base_type,
       scf_value_is_type, scf_type_base_type, scf_value_get_boolean,
       scf_value_get_count, scf_value_get_integer, scf_value_get_time,
       scf_value_get_astring, scf_value_get_ustring, scf_value_get_opaque,
       scf_value_get_as_string, scf_value_get_as_string_typed,
       scf_value_set_boolean, scf_value_set_count, scf_value_set_integer,
       scf_value_set_time, scf_value_set_from_string, scf_value_set_astring,
       scf_value_set_ustring, scf_value_set_opaque - manipulate values in
       the Service Configuration Facility
SYNOPSIS
       cc [ 
flag... ] 
file... 
-lscf [ 
library... ]
       #include <libscf.h>       
scf_value_t *scf_value_create(
scf_handle_t *h);       
scf_handle_t *scf_value_handle(
scf_value_t *v);       
void scf_value_reset(
scf_value_t *v);       
void scf_value_destroy(
scf_value_t *v);       
int scf_value_type(
scf_value_t *v);       
int scf_value_base_type(
scf_value_t *v);       
int scf_value_is_type(
scf_value_t *v, 
scf_type_t type);       
int scf_type_base_type(
scf_type_t type, 
scf_type_t *out);       
int scf_value_get_boolean(
scf_value_t *v, 
uint8_t *out);       
int scf_value_get_count(
scf_value_t *v, 
uint64_t *out);       
int scf_value_get_integer(
scf_value_t *v, 
int64_t *out);       
int scf_value_get_time(
scf_value_t *v, 
int64_t *seconds,            
int32_t *ns);       
ssize_t scf_value_get_astring(
scf_value_t *v, 
char *buf,            
size_t size);       
ssize_t scf_value_get_ustring(
scf_value_t *v, 
char *buf,            
size_t size);       
ssize_t scf_value_get_opaque(
scf_value_t *v, 
char *out,            
size_t len);       
ssize_t scf_value_get_as_string(
scf_value_t *v, 
char *buf,            
size_t size);       
ssize_t scf_value_get_as_string_typed(
scf_value_t *v,            
scf_type_t type, 
char *buf, 
size_t size);       
void scf_value_set_boolean(
scf_value_t *v, 
uint8_t in);       
void scf_value_set_count(
scf_value_t *v, 
uint64_t in);       
void scf_value_set_integer(
scf_value_t *v, 
int64_t in);       
int scf_value_set_time(
scf_value_t *v, 
int64_t seconds,            
int32_t ns);       
int scf_value_set_from_string(
scf_value_t *v, 
scf_type_t type,            
char *in);       
int scf_value_set_astring(
scf_value_t *v, 
const char *in);       
int scf_value_set_ustring(
scf_value_t *v, 
const char *in);       
int scf_value_set_opaque(
scf_value_t *v, 
void *in, 
size_t sz);
DESCRIPTION
       The 
scf_value_create() function creates a new, reset 
scf_value_t that
       holds a single typed value. The value can be used only with the
       handle specified by 
h and objects associated with 
h.
       The 
scf_value_reset() function resets the value to the uninitialized
       state. The 
scf_value_destroy() function deallocates the object.
       The 
scf_value_type() function retrieves the type of the contents of       
v. The 
scf_value_is_type() function determines if a value is of a
       particular type or any of its subtypes. The 
scf_type_base_type()       function returns the base type of 
type. The 
scf_value_base_type()       function returns the true base type of the value (the highest type
       reachable from the value's type).
         Type Identifier      Base Type              Type Description
       --------------------------------------------------------------------------       
SCF_TYPE_INVALID                   reserved invalid type       
SCF_TYPE_BOOLEAN                   single bit       
SCF_TYPE_COUNT                     unsigned 64-bit quantity       
SCF_TYPE_INTEGER                   signed 64-bit quantity       
SCF_TYPE_TIME                      signed 64-bit seconds, signed 32-bit
                                          nanoseconds in the range 0 <= 
ns <
                                          1,000,000,000       
SCF_TYPE_ASTRING                   8-bit NUL-terminated string       
SCF_TYPE_OPAQUE                    opaque 8-bit data       
SCF_TYPE_USTRING       ASTRING     8-bit UTF-8 string       
SCF_TYPE_URI           USTRING     a URI string       
SCF_TYPE_FMRI          URI         a Fault Management Resource Identifier       
SCF_TYPE_HOST          USTRING     either a hostname, IPv4 address, or
                                          IPv6 address       
SCF_TYPE_HOSTNAME      HOST        a fully-qualified domain name       
SCF_TYPE_NET_ADDR_V4   HOST        a dotted-quad IPv4 address with
                                          optional network portion       
SCF_TYPE_NET_ADDR_V6   HOST        legal IPv6 address
       The 
scf_value_get_boolean(), 
scf_value_get_count(),       
scf_value_get_integer(), 
scf_value_get_time(),       
scf_value_get_astring(), 
scf_value_get_ustring(), and       
scf_value_get_opaque() functions read a particular type of value from       
v.
       The 
scf_value_get_as_string() and 
scf_value_get_as_string_typed()       functions convert the value to a string form. For       
scf_value_get_as_string_typed(), the value must be a reachable
       subtype of 
type.
       The 
scf_value_set_boolean(), 
scf_value_set_count(),       
scf_value_set_integer(), 
scf_value_set_time(),       
scf_value_set_astring(), 
scf_value_set_ustring(), and       
scf_value_set_opaque() functions set 
v to a particular value of a
       particular type.
       The 
scf_value_set_from_string() function is the inverse of       
scf_value_get_as_string(). It sets 
v to the value encoded in 
buf of
       type 
type.
       The 
scf_value_set_*() functions will succeed on 
scf_value_t objects
       that have already been set.
RETURN VALUES
       Upon successful completion, 
scf_value_create() returns a new, reset       
scf_value_t. Otherwise, it returns 
NULL.
       Upon successful completion, 
scf_value_handle() returns the handle
       associated with 
v. Otherwise, it returns 
NULL.
       The 
scf_value_base_type() function returns the base type of the
       value, or 
SCF_TYPE_INVALID on failure.
       Upon successful completion, 
scf_value_type() returns the type of the
       value. Otherwise, it returns 
SCF_TYPE_INVALID.
       Upon successful completion, 
scf_value_is_type(),       
scf_value_get_boolean(), 
scf_value_get_count(),       
scf_value_get_integer(), 
scf_value_get_time(), 
scf_value_set_time(),       
scf_value_set_from_string(), 
scf_value_set_astring(),       
scf_value_set_ustring(), and 
scf_value_set_opaque() return 0.
       Otherwise, they return -1.
       Upon successful completion, 
scf_value_get_astring(),       
scf_value_get_ustring(), 
scf_value_get_as_string(), and       
scf_value_get_as_string_typed() return the length of the source
       string, not including the terminating null byte. Otherwise, they
       return -1.
       Upon successful completion, 
scf_value_get_opaque() returns the number
       of bytes written. Otherwise, it returns -1.
ERRORS
       The 
scf_value_create() function will fail if:       
SCF_ERROR_HANDLE_DESTROYED                                     The handle associated with 
h has been
                                     destroyed.       
SCF_ERROR_INVALID_ARGUMENT                                     The handle is 
NULL.       
SCF_ERROR_NO_MEMORY                                     There is not enough memory to allocate
                                     an 
scf_value_t.
       The 
scf_value_handle() function will fail if:       
SCF_ERROR_HANDLE_DESTROYED                                     The handle associated with 
v has been
                                     destroyed.
       The 
scf_value_set_time() function will fail if:       
SCF_ERROR_INVALID_ARGUMENT                                     The nanoseconds field is not in the
                                     range 0 <= 
ns < 1,000,000,000.
       The 
scf_type_base_type() function will fail if:       
SCF_ERROR_INVALID_ARGUMENT                                     The 
type argument is not a valid type.
       The 
scf_value_set_astring(), 
scf_value_set_ustring(),       
scf_value_set_opaque(), and 
scf_value_set_from_string() functions
       will fail if:       
SCF_ERROR_INVALID_ARGUMENT                                     The 
in argument is not a valid value
                                     for the specified type or is longer
                                     than the maximum supported value
                                     length.
       The 
scf_type_base_type(), 
scf_value_is_type(), and       
scf_value_get_as_string_typed() functions will fail if:       
SCF_ERROR_INVALID_ARGUMENT                                     The 
type argument is not a valid type.
       The 
scf_value_type(), 
scf_value_base_type(), 
scf_value_get_boolean(),       
scf_value_get_count(), 
scf_value_get_integer(), 
scf_value_get_time(),       
scf_value_get_astring(), 
scf_value_get_ustring(),       
scf_value_get_as_string(), and 
scf_value_get_as_string_typed()       functions will fail if:       
SCF_ERROR_NOT_SET                            The 
v argument has not been set to a value.
       The 
scf_value_get_boolean(), 
scf_value_get_count(),       
scf_value_get_integer(), 
scf_value_get_time(),       
scf_value_get_astring(), 
scf_value_get_ustring(), and       
scf_value_get_as_string_typed() functions will fail if:       
SCF_ERROR_TYPE_MISMATCH                                  The requested type is not the same as the
                                  value's type and is not in the base-type
                                  chain.
       The 
scf_error(3SCF) function can be used to retrieve the error value.
ATTRIBUTES
       See 
attributes(7) for descriptions of the following attributes:
       +--------------------+-----------------+
       |  ATTRIBUTE TYPE    | ATTRIBUTE VALUE |
       +--------------------+-----------------+
       |Interface Stability | Committed       |
       +--------------------+-----------------+
       |MT-Level            | Safe            |
       +--------------------+-----------------+
SEE ALSO
       libscf(3LIB), 
scf_entry_add_value(3SCF), 
scf_error(3SCF),       
attributes(7)                             September 12, 2020       SCF_VALUE_CREATE(3SCF)