xref: /freebsd/share/man/man9/cnv.9 (revision 7dcd0f0e7b93899da6093d531d82b1d0779dd846)
1*7dcd0f0eSMariusz Zaborski.\"
2*7dcd0f0eSMariusz Zaborski.\" Copyright (c) 2016 Adam Starak <starak.adam@gmail.com>
3*7dcd0f0eSMariusz Zaborski.\" All rights reserved.
4*7dcd0f0eSMariusz Zaborski.\"
5*7dcd0f0eSMariusz Zaborski.\" Redistribution and use in source and binary forms, with or without
6*7dcd0f0eSMariusz Zaborski.\" modification, are permitted provided that the following conditions
7*7dcd0f0eSMariusz Zaborski.\" are met:
8*7dcd0f0eSMariusz Zaborski.\" 1. Redistributions of source code must retain the above copyright
9*7dcd0f0eSMariusz Zaborski.\"    notice, this list of conditions and the following disclaimer.
10*7dcd0f0eSMariusz Zaborski.\" 2. Redistributions in binary form must reproduce the above copyright
11*7dcd0f0eSMariusz Zaborski.\"    notice, this list of conditions and the following disclaimer in the
12*7dcd0f0eSMariusz Zaborski.\"    documentation and/or other materials provided with the distribution.
13*7dcd0f0eSMariusz Zaborski.\"
14*7dcd0f0eSMariusz Zaborski.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND
15*7dcd0f0eSMariusz Zaborski.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16*7dcd0f0eSMariusz Zaborski.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
17*7dcd0f0eSMariusz Zaborski.\" ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE
18*7dcd0f0eSMariusz Zaborski.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
19*7dcd0f0eSMariusz Zaborski.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
20*7dcd0f0eSMariusz Zaborski.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
21*7dcd0f0eSMariusz Zaborski.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
22*7dcd0f0eSMariusz Zaborski.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
23*7dcd0f0eSMariusz Zaborski.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
24*7dcd0f0eSMariusz Zaborski.\" SUCH DAMAGE.
25*7dcd0f0eSMariusz Zaborski.\"
26*7dcd0f0eSMariusz Zaborski.\" $FreeBSD$
27*7dcd0f0eSMariusz Zaborski.\"
28*7dcd0f0eSMariusz Zaborski.Dd July 26, 2016
29*7dcd0f0eSMariusz Zaborski.Dt CNV 9
30*7dcd0f0eSMariusz Zaborski.Os
31*7dcd0f0eSMariusz Zaborski.Sh NAME
32*7dcd0f0eSMariusz Zaborski.Nm cnvlist_get,
33*7dcd0f0eSMariusz Zaborski.Nm cnvlist_take,
34*7dcd0f0eSMariusz Zaborski.Nm cnvlist_free,
35*7dcd0f0eSMariusz Zaborski.Nd "API for managing name/value pairs by cookie."
36*7dcd0f0eSMariusz Zaborski.Sh LIBRARY
37*7dcd0f0eSMariusz Zaborski.Lb libnv
38*7dcd0f0eSMariusz Zaborski.Sh SYNOPSIS
39*7dcd0f0eSMariusz Zaborski.In sys/cnv.h
40*7dcd0f0eSMariusz Zaborski.Ft bool
41*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_bool "void *cookiep"
42*7dcd0f0eSMariusz Zaborski.Ft uint64_t
43*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_number "void *cookiep"
44*7dcd0f0eSMariusz Zaborski.Ft "const char *"
45*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_string "void *cookiep"
46*7dcd0f0eSMariusz Zaborski.Ft "const nvlist_t *"
47*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_nvlist "void *cookiep"
48*7dcd0f0eSMariusz Zaborski.Ft "const void *"
49*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_binary "void *cookiep" "size_t *sizep"
50*7dcd0f0eSMariusz Zaborski.Ft "const bool *"
51*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_bool_array "void *cookiep" "size_t *nitemsp"
52*7dcd0f0eSMariusz Zaborski.Ft "const uint64_t *"
53*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_number_array "void *cookiep" "size_t *nitemsp"
54*7dcd0f0eSMariusz Zaborski.Ft "const char * const *"
55*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_string_array "void *cookiep" "size_t *nitemsp"
56*7dcd0f0eSMariusz Zaborski.Ft "const nvlist_t * const *"
57*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_nvlist_array "void *cookiep" "size_t *nitemsp"
58*7dcd0f0eSMariusz Zaborski.Ft int
59*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_descriptor "void *cookiep"
60*7dcd0f0eSMariusz Zaborski.Ft "const int *"
61*7dcd0f0eSMariusz Zaborski.Fn cnvlist_get_descriptor_array "void *cookiep" "size_t *nitemsp"
62*7dcd0f0eSMariusz Zaborski.\"
63*7dcd0f0eSMariusz Zaborski.Ft bool
64*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_bool "void *cookiep"
65*7dcd0f0eSMariusz Zaborski.Ft uint64_t
66*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_number "void *cookiep"
67*7dcd0f0eSMariusz Zaborski.Ft "const char *"
68*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_string "void *cookiep"
69*7dcd0f0eSMariusz Zaborski.Ft "const nvlist_t *"
70*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_nvlist "void *cookiep"
71*7dcd0f0eSMariusz Zaborski.Ft "const void *"
72*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_binary "void *cookiep" "size_t *sizep"
73*7dcd0f0eSMariusz Zaborski.Ft "const bool *"
74*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_bool_array "void *cookiep" "size_t *nitemsp"
75*7dcd0f0eSMariusz Zaborski.Ft "const uint64_t *"
76*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_number_array "void *cookiep" "size_t *nitemsp"
77*7dcd0f0eSMariusz Zaborski.Ft "const char * const *"
78*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_string_array "void *cookiep" "size_t *nitemsp"
79*7dcd0f0eSMariusz Zaborski.Ft "const nvlist_t * const *"
80*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_nvlist_array "void *cookiep" "size_t *nitemsp"
81*7dcd0f0eSMariusz Zaborski.Ft int
82*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_descriptor "void *cookiep"
83*7dcd0f0eSMariusz Zaborski.Ft "const int *'
84*7dcd0f0eSMariusz Zaborski.Fn cnvlist_take_descriptor_array "void *cookiep" "size_t *nitemsp"
85*7dcd0f0eSMariusz Zaborski.\"
86*7dcd0f0eSMariusz Zaborski.Ft void
87*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_null "nvlist_t *nvl" "void *cookiep"
88*7dcd0f0eSMariusz Zaborski.Ft void
89*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_bool "nvlist_t *nvl" "void *cookiep"
90*7dcd0f0eSMariusz Zaborski.Ft void
91*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_number "nvlist_t *nvl" "void *cookiep"
92*7dcd0f0eSMariusz Zaborski.Ft void
93*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_string "nvlist_t *nvl" "void *cookiep"
94*7dcd0f0eSMariusz Zaborski.Ft void
95*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_nvlist "nvlist_t *nvl" "void *cookiep"
96*7dcd0f0eSMariusz Zaborski.Ft void
97*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_descriptor "nvlist_t *nvl" "void *cookiep"
98*7dcd0f0eSMariusz Zaborski.Ft void
99*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_binary "nvlist_t *nvl" "void *cookiep"
100*7dcd0f0eSMariusz Zaborski.Ft void
101*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_bool_array "nvlist_t *nvl" "void *cookiep"
102*7dcd0f0eSMariusz Zaborski.Ft void
103*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_number_array "nvlist_t *nvl" "void *cookiep"
104*7dcd0f0eSMariusz Zaborski.Ft void
105*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_string_array "nvlist_t *nvl" "void *cookiep"
106*7dcd0f0eSMariusz Zaborski.Ft void
107*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_nvlist_array "nvlist_t *nvl" "void *cookiep"
108*7dcd0f0eSMariusz Zaborski.Ft void
109*7dcd0f0eSMariusz Zaborski.Fn cnvlist_free_descriptor_array "nvlist_t *nvl" "void *cookiep"
110*7dcd0f0eSMariusz Zaborski.Sh DESCRIPTION
111*7dcd0f0eSMariusz ZaborskiThe
112*7dcd0f0eSMariusz Zaborski.Nm libnv
113*7dcd0f0eSMariusz Zaborskilibrary permits easy management of name/value pairs and can send and receive
114*7dcd0f0eSMariusz Zaborskithem over sockets.
115*7dcd0f0eSMariusz ZaborskiFor more information, also see
116*7dcd0f0eSMariusz Zaborski.Xr nv 9 .
117*7dcd0f0eSMariusz Zaborski.Pp
118*7dcd0f0eSMariusz ZaborskiThe concept of cookies is explained in
119*7dcd0f0eSMariusz Zaborski.Fn nvlist_next ,
120*7dcd0f0eSMariusz Zaborski.Fn nvlist_get_parent ,
121*7dcd0f0eSMariusz Zaborskiand
122*7dcd0f0eSMariusz Zaborski.Fn nvlist_get_pararr
123*7dcd0f0eSMariusz Zaborskifrom
124*7dcd0f0eSMariusz Zaborski.Xr nv 9 .
125*7dcd0f0eSMariusz Zaborski.Pp
126*7dcd0f0eSMariusz ZaborskiThe
127*7dcd0f0eSMariusz Zaborski.Nm cnvlist_get
128*7dcd0f0eSMariusz Zaborskifamily of functions obtains the value associated with the given cookie.
129*7dcd0f0eSMariusz ZaborskiReturned strings, nvlists, descriptors, binaries, or arrays must not be modified
130*7dcd0f0eSMariusz Zaborskiby the user, since they still belong to the nvlist.
131*7dcd0f0eSMariusz ZaborskiThe nvlist must not be in an error state.
132*7dcd0f0eSMariusz Zaborski.Pp
133*7dcd0f0eSMariusz ZaborskiThe
134*7dcd0f0eSMariusz Zaborski.Nm cnvlist_take
135*7dcd0f0eSMariusz Zaborskifamily of functions returns the value associated with the given cookie and
136*7dcd0f0eSMariusz Zaborskiremoves the element from the nvlist.
137*7dcd0f0eSMariusz ZaborskiWhen the value is a string, binary, or array value, the caller is responsible
138*7dcd0f0eSMariusz Zaborskifor freeing the returned memory with
139*7dcd0f0eSMariusz Zaborski.Fn free 3 .
140*7dcd0f0eSMariusz ZaborskiWhen the value is an nvlist, the caller is responsible for destroying the
141*7dcd0f0eSMariusz Zaborskireturned nvlist with
142*7dcd0f0eSMariusz Zaborski.Fn nvlist_destroy .
143*7dcd0f0eSMariusz ZaborskiWhen the value is a descriptor, the caller is responsible for closing the
144*7dcd0f0eSMariusz Zaborskireturned descriptor with the
145*7dcd0f0eSMariusz Zaborski.Fn close 2 .
146*7dcd0f0eSMariusz Zaborski.Pp
147*7dcd0f0eSMariusz ZaborskiThe
148*7dcd0f0eSMariusz Zaborski.Nm cnvlist_free
149*7dcd0f0eSMariusz Zaborskifamily of functions removes an element of the supplied cookie and frees all
150*7dcd0f0eSMariusz Zaborskiresources.
151*7dcd0f0eSMariusz ZaborskiIf an element of the given cookie has the wrong type or does not exist, the
152*7dcd0f0eSMariusz Zaborskiprogram
153*7dcd0f0eSMariusz Zaborskiis aborted.
154*7dcd0f0eSMariusz Zaborski.Sh EXAMPLE
155*7dcd0f0eSMariusz ZaborskiThe following example demonstrates how to deal with cnvlist API.
156*7dcd0f0eSMariusz Zaborski.Bd -literal
157*7dcd0f0eSMariusz Zaborskiint type;
158*7dcd0f0eSMariusz Zaborskivoid *cookie, *scookie, *bcookie;
159*7dcd0f0eSMariusz Zaborskinvlist_t *nvl;
160*7dcd0f0eSMariusz Zaborskichar *name;
161*7dcd0f0eSMariusz Zaborski
162*7dcd0f0eSMariusz Zaborskinvl = nvlist_create(0);
163*7dcd0f0eSMariusz Zaborskinvlist_add_bool(nvl, "test", 1 == 2);
164*7dcd0f0eSMariusz Zaborskinvlist_add_string(nvl, "test2", "cnvlist");
165*7dcd0f0eSMariusz Zaborskicookie = NULL;
166*7dcd0f0eSMariusz Zaborski
167*7dcd0f0eSMariusz Zaborskiwhile (nvlist_next(nvl, &type, &cookie) != NULL) {
168*7dcd0f0eSMariusz Zaborski        switch (type) {
169*7dcd0f0eSMariusz Zaborski        case NV_TYPE_BOOL:
170*7dcd0f0eSMariusz Zaborski                printf("test: %d\\n", cnvlist_get_bool(cookie));
171*7dcd0f0eSMariusz Zaborski                bcookie = cookie;
172*7dcd0f0eSMariusz Zaborski                break;
173*7dcd0f0eSMariusz Zaborski        case NV_TYPE_STRING:
174*7dcd0f0eSMariusz Zaborski                printf("test2: %s\\n", cnvlist_get_string(cookie));
175*7dcd0f0eSMariusz Zaborski                scookie = cookie;
176*7dcd0f0eSMariusz Zaborski                break;
177*7dcd0f0eSMariusz Zaborski        }
178*7dcd0f0eSMariusz Zaborski}
179*7dcd0f0eSMariusz Zaborski
180*7dcd0f0eSMariusz Zaborskiname = cnvlist_take_string(nvl, scookie);
181*7dcd0f0eSMariusz Zaborskicnvlist_free_bool(nvl, bcookie);
182*7dcd0f0eSMariusz Zaborski
183*7dcd0f0eSMariusz Zaborskiprintf("test2: %s\\n", name);
184*7dcd0f0eSMariusz Zaborskifree(name);
185*7dcd0f0eSMariusz Zaborski
186*7dcd0f0eSMariusz Zaborskiprintf("nvlist_empty = %d\\n", nvlist_empty(nvl));
187*7dcd0f0eSMariusz Zaborskinvlist_destroy(nvl);
188*7dcd0f0eSMariusz Zaborski
189*7dcd0f0eSMariusz Zaborskireturn (0);
190*7dcd0f0eSMariusz Zaborski.Ed
191*7dcd0f0eSMariusz Zaborski.Sh SEE ALSO
192*7dcd0f0eSMariusz Zaborski.Xr nv 9 ,
193*7dcd0f0eSMariusz Zaborski.Xr close 2 ,
194*7dcd0f0eSMariusz Zaborski.Xr free 3
195*7dcd0f0eSMariusz Zaborski.Sh AUTHORS
196*7dcd0f0eSMariusz Zaborski.An -nosplit
197*7dcd0f0eSMariusz ZaborskiThe
198*7dcd0f0eSMariusz Zaborski.Nm cnv
199*7dcd0f0eSMariusz ZaborskiAPI was created during the Google Summer Of Code 2016 by
200