17dcd0f0eSMariusz Zaborski.\" 27dcd0f0eSMariusz Zaborski.\" Copyright (c) 2016 Adam Starak <starak.adam@gmail.com> 37dcd0f0eSMariusz Zaborski.\" All rights reserved. 47dcd0f0eSMariusz Zaborski.\" 57dcd0f0eSMariusz Zaborski.\" Redistribution and use in source and binary forms, with or without 67dcd0f0eSMariusz Zaborski.\" modification, are permitted provided that the following conditions 77dcd0f0eSMariusz Zaborski.\" are met: 87dcd0f0eSMariusz Zaborski.\" 1. Redistributions of source code must retain the above copyright 97dcd0f0eSMariusz Zaborski.\" notice, this list of conditions and the following disclaimer. 107dcd0f0eSMariusz Zaborski.\" 2. Redistributions in binary form must reproduce the above copyright 117dcd0f0eSMariusz Zaborski.\" notice, this list of conditions and the following disclaimer in the 127dcd0f0eSMariusz Zaborski.\" documentation and/or other materials provided with the distribution. 137dcd0f0eSMariusz Zaborski.\" 147dcd0f0eSMariusz Zaborski.\" THIS SOFTWARE IS PROVIDED BY THE AUTHOR AND CONTRIBUTORS ``AS IS'' AND 157dcd0f0eSMariusz Zaborski.\" ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE 167dcd0f0eSMariusz Zaborski.\" IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE 177dcd0f0eSMariusz Zaborski.\" ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHOR OR CONTRIBUTORS BE LIABLE 187dcd0f0eSMariusz Zaborski.\" FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL 197dcd0f0eSMariusz Zaborski.\" DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS 207dcd0f0eSMariusz Zaborski.\" OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) 217dcd0f0eSMariusz Zaborski.\" HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT 227dcd0f0eSMariusz Zaborski.\" LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY 237dcd0f0eSMariusz Zaborski.\" OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF 247dcd0f0eSMariusz Zaborski.\" SUCH DAMAGE. 257dcd0f0eSMariusz Zaborski.\" 267dcd0f0eSMariusz Zaborski.\" $FreeBSD$ 277dcd0f0eSMariusz Zaborski.\" 280db44d55SMariusz Zaborski.Dd June 18, 2018 297dcd0f0eSMariusz Zaborski.Dt CNV 9 307dcd0f0eSMariusz Zaborski.Os 317dcd0f0eSMariusz Zaborski.Sh NAME 327dcd0f0eSMariusz Zaborski.Nm cnvlist_get , 337dcd0f0eSMariusz Zaborski.Nm cnvlist_take , 347651c3afSEdward Tomasz Napierala.Nm cnvlist_free 357dcd0f0eSMariusz Zaborski.Nd "API for managing name/value pairs by cookie." 367dcd0f0eSMariusz Zaborski.Sh LIBRARY 377dcd0f0eSMariusz Zaborski.Lb libnv 387dcd0f0eSMariusz Zaborski.Sh SYNOPSIS 397dcd0f0eSMariusz Zaborski.In sys/cnv.h 4023c5a51eSMariusz Zaborski.Ft const char * 4130665f3cSMariusz Zaborski.Fn cnvlist_name "const void *cookie" 4223c5a51eSMariusz Zaborski.Ft int 4330665f3cSMariusz Zaborski.Fn cnvlist_type "const void *cookie" 4423c5a51eSMariusz Zaborski.\" 457dcd0f0eSMariusz Zaborski.Ft bool 4630665f3cSMariusz Zaborski.Fn cnvlist_get_bool "const void *cookie" 477dcd0f0eSMariusz Zaborski.Ft uint64_t 4830665f3cSMariusz Zaborski.Fn cnvlist_get_number "const void *cookie" 497dcd0f0eSMariusz Zaborski.Ft "const char *" 5030665f3cSMariusz Zaborski.Fn cnvlist_get_string "const void *cookie" 517dcd0f0eSMariusz Zaborski.Ft "const nvlist_t *" 5230665f3cSMariusz Zaborski.Fn cnvlist_get_nvlist "const void *cookie" 537dcd0f0eSMariusz Zaborski.Ft "const void *" 5430665f3cSMariusz Zaborski.Fn cnvlist_get_binary "const void *cookie" "size_t *sizep" 557dcd0f0eSMariusz Zaborski.Ft "const bool *" 5630665f3cSMariusz Zaborski.Fn cnvlist_get_bool_array "const void *cookie" "size_t *nitemsp" 577dcd0f0eSMariusz Zaborski.Ft "const uint64_t *" 5830665f3cSMariusz Zaborski.Fn cnvlist_get_number_array "const void *cookie" "size_t *nitemsp" 597dcd0f0eSMariusz Zaborski.Ft "const char * const *" 6030665f3cSMariusz Zaborski.Fn cnvlist_get_string_array "const void *cookie" "size_t *nitemsp" 617dcd0f0eSMariusz Zaborski.Ft "const nvlist_t * const *" 6230665f3cSMariusz Zaborski.Fn cnvlist_get_nvlist_array "const void *cookie" "size_t *nitemsp" 637dcd0f0eSMariusz Zaborski.Ft int 6430665f3cSMariusz Zaborski.Fn cnvlist_get_descriptor "const void *cookie" 657dcd0f0eSMariusz Zaborski.Ft "const int *" 6630665f3cSMariusz Zaborski.Fn cnvlist_get_descriptor_array "const void *cookie" "size_t *nitemsp" 677dcd0f0eSMariusz Zaborski.\" 687dcd0f0eSMariusz Zaborski.Ft bool 69d82e41b6SMariusz Zaborski.Fn cnvlist_take_bool "void *cookie" 707dcd0f0eSMariusz Zaborski.Ft uint64_t 71d82e41b6SMariusz Zaborski.Fn cnvlist_take_number "void *cookie" 727dcd0f0eSMariusz Zaborski.Ft "const char *" 73d82e41b6SMariusz Zaborski.Fn cnvlist_take_string "void *cookie" 747dcd0f0eSMariusz Zaborski.Ft "const nvlist_t *" 75d82e41b6SMariusz Zaborski.Fn cnvlist_take_nvlist "void *cookie" 767dcd0f0eSMariusz Zaborski.Ft "const void *" 77d82e41b6SMariusz Zaborski.Fn cnvlist_take_binary "void *cookie" "size_t *sizep" 787dcd0f0eSMariusz Zaborski.Ft "const bool *" 79d82e41b6SMariusz Zaborski.Fn cnvlist_take_bool_array "void *cookie" "size_t *nitemsp" 807dcd0f0eSMariusz Zaborski.Ft "const uint64_t *" 81d82e41b6SMariusz Zaborski.Fn cnvlist_take_number_array "void *cookie" "size_t *nitemsp" 827dcd0f0eSMariusz Zaborski.Ft "const char * const *" 83d82e41b6SMariusz Zaborski.Fn cnvlist_take_string_array "void *cookie" "size_t *nitemsp" 847dcd0f0eSMariusz Zaborski.Ft "const nvlist_t * const *" 85d82e41b6SMariusz Zaborski.Fn cnvlist_take_nvlist_array "void *cookie" "size_t *nitemsp" 867dcd0f0eSMariusz Zaborski.Ft int 87d82e41b6SMariusz Zaborski.Fn cnvlist_take_descriptor "void *cookie" 88c85d7166SChristian Brueffer.Ft "const int *" 89d82e41b6SMariusz Zaborski.Fn cnvlist_take_descriptor_array "void *cookie" "size_t *nitemsp" 907dcd0f0eSMariusz Zaborski.\" 917dcd0f0eSMariusz Zaborski.Ft void 92d82e41b6SMariusz Zaborski.Fn cnvlist_free_null "void *cookie" 937dcd0f0eSMariusz Zaborski.Ft void 94d82e41b6SMariusz Zaborski.Fn cnvlist_free_bool "void *cookie" 957dcd0f0eSMariusz Zaborski.Ft void 96d82e41b6SMariusz Zaborski.Fn cnvlist_free_number "void *cookie" 977dcd0f0eSMariusz Zaborski.Ft void 98d82e41b6SMariusz Zaborski.Fn cnvlist_free_string "void *cookie" 997dcd0f0eSMariusz Zaborski.Ft void 100d82e41b6SMariusz Zaborski.Fn cnvlist_free_nvlist "void *cookie" 1017dcd0f0eSMariusz Zaborski.Ft void 102d82e41b6SMariusz Zaborski.Fn cnvlist_free_descriptor "void *cookie" 1037dcd0f0eSMariusz Zaborski.Ft void 104d82e41b6SMariusz Zaborski.Fn cnvlist_free_binary "void *cookie" 1057dcd0f0eSMariusz Zaborski.Ft void 106d82e41b6SMariusz Zaborski.Fn cnvlist_free_bool_array "void *cookie" 1077dcd0f0eSMariusz Zaborski.Ft void 108d82e41b6SMariusz Zaborski.Fn cnvlist_free_number_array "void *cookie" 1097dcd0f0eSMariusz Zaborski.Ft void 110d82e41b6SMariusz Zaborski.Fn cnvlist_free_string_array "void *cookie" 1117dcd0f0eSMariusz Zaborski.Ft void 112d82e41b6SMariusz Zaborski.Fn cnvlist_free_nvlist_array "void *cookie" 1137dcd0f0eSMariusz Zaborski.Ft void 114d82e41b6SMariusz Zaborski.Fn cnvlist_free_descriptor_array "void *cookie" 1157dcd0f0eSMariusz Zaborski.Sh DESCRIPTION 1167dcd0f0eSMariusz ZaborskiThe 1177dcd0f0eSMariusz Zaborski.Nm libnv 1187dcd0f0eSMariusz Zaborskilibrary permits easy management of name/value pairs and can send and receive 1197dcd0f0eSMariusz Zaborskithem over sockets. 1207dcd0f0eSMariusz ZaborskiFor more information, also see 1217dcd0f0eSMariusz Zaborski.Xr nv 9 . 1227dcd0f0eSMariusz Zaborski.Pp 1237dcd0f0eSMariusz ZaborskiThe concept of cookies is explained in 1247dcd0f0eSMariusz Zaborski.Fn nvlist_next , 1257dcd0f0eSMariusz Zaborski.Fn nvlist_get_parent , 1267dcd0f0eSMariusz Zaborskiand 1277dcd0f0eSMariusz Zaborski.Fn nvlist_get_pararr 1287dcd0f0eSMariusz Zaborskifrom 1297dcd0f0eSMariusz Zaborski.Xr nv 9 . 1307dcd0f0eSMariusz Zaborski.Pp 1317dcd0f0eSMariusz ZaborskiThe 13223c5a51eSMariusz Zaborski.Fn cnvlist_name 13323c5a51eSMariusz Zaborskifunction returns the name of an element associated with the given cookie. 13423c5a51eSMariusz Zaborski.Pp 13523c5a51eSMariusz ZaborskiThe 13623c5a51eSMariusz Zaborski.Fn cnvlist_type 13723c5a51eSMariusz Zaborskifunction returns the type of an element associated with the given cookie. 13823c5a51eSMariusz ZaborskiTypes which can be returned are described in 13923c5a51eSMariusz Zaborski.Xr nv 9 . 14023c5a51eSMariusz Zaborski.Pp 14123c5a51eSMariusz ZaborskiThe 1427dcd0f0eSMariusz Zaborski.Nm cnvlist_get 1437dcd0f0eSMariusz Zaborskifamily of functions obtains the value associated with the given cookie. 1447dcd0f0eSMariusz ZaborskiReturned strings, nvlists, descriptors, binaries, or arrays must not be modified 1457dcd0f0eSMariusz Zaborskiby the user, since they still belong to the nvlist. 1467dcd0f0eSMariusz ZaborskiThe nvlist must not be in an error state. 1477dcd0f0eSMariusz Zaborski.Pp 1487dcd0f0eSMariusz ZaborskiThe 1497dcd0f0eSMariusz Zaborski.Nm cnvlist_take 1507dcd0f0eSMariusz Zaborskifamily of functions returns the value associated with the given cookie and 1517dcd0f0eSMariusz Zaborskiremoves the element from the nvlist. 1527dcd0f0eSMariusz ZaborskiWhen the value is a string, binary, or array value, the caller is responsible 1537dcd0f0eSMariusz Zaborskifor freeing the returned memory with 1547dcd0f0eSMariusz Zaborski.Fn free 3 . 1557dcd0f0eSMariusz ZaborskiWhen the value is an nvlist, the caller is responsible for destroying the 1567dcd0f0eSMariusz Zaborskireturned nvlist with 1577dcd0f0eSMariusz Zaborski.Fn nvlist_destroy . 1587dcd0f0eSMariusz ZaborskiWhen the value is a descriptor, the caller is responsible for closing the 1597dcd0f0eSMariusz Zaborskireturned descriptor with the 1607dcd0f0eSMariusz Zaborski.Fn close 2 . 1617dcd0f0eSMariusz Zaborski.Pp 1627dcd0f0eSMariusz ZaborskiThe 1637dcd0f0eSMariusz Zaborski.Nm cnvlist_free 1647dcd0f0eSMariusz Zaborskifamily of functions removes an element of the supplied cookie and frees all 1657dcd0f0eSMariusz Zaborskiresources. 1667dcd0f0eSMariusz ZaborskiIf an element of the given cookie has the wrong type or does not exist, the 1677dcd0f0eSMariusz Zaborskiprogram 1687dcd0f0eSMariusz Zaborskiis aborted. 169*8dba3dd8SGordon Bergling.Sh EXAMPLES 1707dcd0f0eSMariusz ZaborskiThe following example demonstrates how to deal with cnvlist API. 1717dcd0f0eSMariusz Zaborski.Bd -literal 1727dcd0f0eSMariusz Zaborskiint type; 1737dcd0f0eSMariusz Zaborskivoid *cookie, *scookie, *bcookie; 1747dcd0f0eSMariusz Zaborskinvlist_t *nvl; 1757dcd0f0eSMariusz Zaborskichar *name; 1767dcd0f0eSMariusz Zaborski 1777dcd0f0eSMariusz Zaborskinvl = nvlist_create(0); 1787dcd0f0eSMariusz Zaborskinvlist_add_bool(nvl, "test", 1 == 2); 1797dcd0f0eSMariusz Zaborskinvlist_add_string(nvl, "test2", "cnvlist"); 1807dcd0f0eSMariusz Zaborskicookie = NULL; 1817dcd0f0eSMariusz Zaborski 1827dcd0f0eSMariusz Zaborskiwhile (nvlist_next(nvl, &type, &cookie) != NULL) { 1837dcd0f0eSMariusz Zaborski switch (type) { 1847dcd0f0eSMariusz Zaborski case NV_TYPE_BOOL: 1857dcd0f0eSMariusz Zaborski printf("test: %d\\n", cnvlist_get_bool(cookie)); 1867dcd0f0eSMariusz Zaborski bcookie = cookie; 1877dcd0f0eSMariusz Zaborski break; 1887dcd0f0eSMariusz Zaborski case NV_TYPE_STRING: 1897dcd0f0eSMariusz Zaborski printf("test2: %s\\n", cnvlist_get_string(cookie)); 1907dcd0f0eSMariusz Zaborski scookie = cookie; 1917dcd0f0eSMariusz Zaborski break; 1927dcd0f0eSMariusz Zaborski } 1937dcd0f0eSMariusz Zaborski} 1947dcd0f0eSMariusz Zaborski 195d82e41b6SMariusz Zaborskiname = cnvlist_take_string(scookie); 196d82e41b6SMariusz Zaborskicnvlist_free_bool(bcookie); 1977dcd0f0eSMariusz Zaborski 1987dcd0f0eSMariusz Zaborskiprintf("test2: %s\\n", name); 1997dcd0f0eSMariusz Zaborskifree(name); 2007dcd0f0eSMariusz Zaborski 2017dcd0f0eSMariusz Zaborskiprintf("nvlist_empty = %d\\n", nvlist_empty(nvl)); 2027dcd0f0eSMariusz Zaborskinvlist_destroy(nvl); 2037dcd0f0eSMariusz Zaborski 2047dcd0f0eSMariusz Zaborskireturn (0); 2057dcd0f0eSMariusz Zaborski.Ed 2067dcd0f0eSMariusz Zaborski.Sh SEE ALSO 2077dcd0f0eSMariusz Zaborski.Xr close 2 , 208c85d7166SChristian Brueffer.Xr free 3 , 209c85d7166SChristian Brueffer.Xr nv 9 2107dcd0f0eSMariusz Zaborski.Sh AUTHORS 2117dcd0f0eSMariusz ZaborskiThe 2127dcd0f0eSMariusz Zaborski.Nm cnv 2137dcd0f0eSMariusz ZaborskiAPI was created during the Google Summer Of Code 2016 by 214c85d7166SChristian Brueffer.An Adam Starak . 215