cnv.h revision 1.2 1 /* $NetBSD: cnv.h,v 1.2 2018/09/08 14:02:15 christos Exp $ */
2
3 /*-
4 * SPDX-License-Identifier: BSD-2-Clause-FreeBSD
5 *
6 * Copyright (c) 2016 Adam Starak <starak.adam (at) gmail.com>
7 * All rights reserved.
8 *
9 * Redistribution and use in source and binary forms, with or without
10 * modification, are permitted provided that the following conditions
11 * are met:
12 * 1. Redistributions of source code must retain the above copyright
13 * notice, this list of conditions and the following disclaimer.
14 * 2. Redistributions in binary form must reproduce the above copyright
15 * notice, this list of conditions and the following disclaimer in the
16 * documentation and/or other materials provided with the distribution.
17 *
18 * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
19 * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
20 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
21 * ARE DISCLAIMED. IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
22 * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
23 * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
24 * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
25 * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
26 * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
27 * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
28 * SUCH DAMAGE.
29 *
30 * $FreeBSD: head/sys/sys/cnv.h 335343 2018-06-18 21:26:58Z oshogbo $
31 */
32
33 #ifndef _CNV_H_
34 #define _CNV_H_
35
36 #include <sys/cdefs.h>
37
38 #if !defined(_KERNEL) && !defined(_STANDALONE)
39 #include <stdarg.h>
40 #include <stdbool.h>
41 #include <stdint.h>
42 #include <stdio.h>
43 #endif
44
45 #ifndef _NVLIST_T_DECLARED
46 #define _NVLIST_T_DECLARED
47 struct nvlist;
48
49 typedef struct nvlist nvlist_t;
50 #endif
51
52 __BEGIN_DECLS
53
54 /*
55 * Functions which returns information about the given cookie.
56 */
57 const char *cnvlist_name(const void *cookie);
58 int cnvlist_type(const void *cookie);
59
60 /*
61 * The cnvlist_get functions returns value associated with the given cookie.
62 * If it returns a pointer, the pointer represents internal buffer and should
63 * not be freed by the caller.
64 */
65
66 bool cnvlist_get_bool(const void *cookie);
67 uint64_t cnvlist_get_number(const void *cookie);
68 const char *cnvlist_get_string(const void *cookie);
69 const nvlist_t *cnvlist_get_nvlist(const void *cookie);
70 const void *cnvlist_get_binary(const void *cookie, size_t *sizep);
71 const bool *cnvlist_get_bool_array(const void *cookie, size_t *nitemsp);
72 const uint64_t *cnvlist_get_number_array(const void *cookie, size_t *nitemsp);
73 const char * const *cnvlist_get_string_array(const void *cookie, size_t *nitemsp);
74 const nvlist_t * const *cnvlist_get_nvlist_array(const void *cookie, size_t *nitemsp);
75 #if !defined(_KERNEL) && !defined(_STANDALONE)
76 int cnvlist_get_descriptor(const void *cookie);
77 const int *cnvlist_get_descriptor_array(const void *cookie, size_t *nitemsp);
78 #endif
79
80
81 /*
82 * The cnvlist_take functions returns value associated with the given cookie and
83 * remove the given entry from the nvlist.
84 * The caller is responsible for freeing received data.
85 */
86
87 bool cnvlist_take_bool(void *cookie);
88 uint64_t cnvlist_take_number(void *cookie);
89 char *cnvlist_take_string(void *cookie);
90 nvlist_t *cnvlist_take_nvlist(void *cookie);
91 void *cnvlist_take_binary(void *cookie, size_t *sizep);
92 bool *cnvlist_take_bool_array(void *cookie, size_t *nitemsp);
93 uint64_t *cnvlist_take_number_array(void *cookie, size_t *nitemsp);
94 char **cnvlist_take_string_array(void *cookie, size_t *nitemsp);
95 nvlist_t **cnvlist_take_nvlist_array(void *cookie, size_t *nitemsp);
96 #if !defined(_KERNEL) && !defined(_STANDALONE)
97 int cnvlist_take_descriptor(void *cookie);
98 int *cnvlist_take_descriptor_array(void *cookie, size_t *nitemsp);
99 #endif
100
101 /*
102 * The cnvlist_free functions removes the given name/value pair from the nvlist based on cookie
103 * and frees memory associated with it.
104 */
105
106 void cnvlist_free_bool(void *cookie);
107 void cnvlist_free_number(void *cookie);
108 void cnvlist_free_string(void *cookie);
109 void cnvlist_free_nvlist(void *cookie);
110 void cnvlist_free_binary(void *cookie);
111 void cnvlist_free_bool_array(void *cookie);
112 void cnvlist_free_number_array(void *cookie);
113 void cnvlist_free_string_array(void *cookie);
114 void cnvlist_free_nvlist_array(void *cookie);
115 #if !defined(_KERNEL) && !defined(_STANDALONE)
116 void cnvlist_free_descriptor(void *cookie);
117 void cnvlist_free_descriptor_array(void *cookie);
118 #endif
119
120 __END_DECLS
121
122 #endif /* !_CNV_H_ */
123