Mercurial > libjeffpc
annotate include/jeffpc/nvl.h @ 822:f8d9ccf26563
nvl: add nvl_lookup_val to easily get at the struct val pointer value
Signed-off-by: Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
author | Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
---|---|
date | Fri, 30 Oct 2020 17:57:53 -0400 |
parents | 342a128c5011 |
children | ccb955138113 |
rev | line source |
---|---|
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
1 /* |
822
f8d9ccf26563
nvl: add nvl_lookup_val to easily get at the struct val pointer value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
567
diff
changeset
|
2 * Copyright (c) 2017-2020 Josef 'Jeff' Sipek <jeffpc@josefsipek.net> |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
3 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
4 * Permission is hereby granted, free of charge, to any person obtaining a copy |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
5 * of this software and associated documentation files (the "Software"), to deal |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
6 * in the Software without restriction, including without limitation the rights |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
7 * to use, copy, modify, merge, publish, distribute, sublicense, and/or sell |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
8 * copies of the Software, and to permit persons to whom the Software is |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
9 * furnished to do so, subject to the following conditions: |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
10 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
11 * The above copyright notice and this permission notice shall be included in |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
12 * all copies or substantial portions of the Software. |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
13 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
14 * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
15 * IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
16 * FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
17 * AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
18 * LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
19 * OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
20 * SOFTWARE. |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
21 */ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
22 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
23 #ifndef __JEFFPC_NVL_H |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
24 #define __JEFFPC_NVL_H |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
25 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
26 #include <stdbool.h> |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
27 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
28 #include <jeffpc/val.h> |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
29 #include <jeffpc/buffer.h> |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
30 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
31 struct nvlist { |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
32 struct val val; |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
33 }; |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
34 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
35 /* do not access these directly */ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
36 struct nvpair { |
525
90cb00f83e5b
nvl: use a red-black tree to keep track of name-value pairs
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
494
diff
changeset
|
37 struct rb_node node; |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
38 |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
39 struct str *name; |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
40 struct val *value; |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
41 }; |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
42 |
303
1ec946a39a92
nvlist: conditional conversion of values
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
292
diff
changeset
|
43 enum nvcvtcond { |
1ec946a39a92
nvlist: conditional conversion of values
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
292
diff
changeset
|
44 NVCVT_COND_ALWAYS = 0, |
304
f1c8cc0ee714
nvlist: support for empty-string conversion condition
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
303
diff
changeset
|
45 NVCVT_COND_STR_EMPTY, |
303
1ec946a39a92
nvlist: conditional conversion of values
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
292
diff
changeset
|
46 }; |
1ec946a39a92
nvlist: conditional conversion of values
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
292
diff
changeset
|
47 |
274
c35b1f62bcac
nvlist: value type conversion code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
271
diff
changeset
|
48 struct nvl_convert_info { |
c35b1f62bcac
nvlist: value type conversion code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
271
diff
changeset
|
49 const char *name; |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
50 enum val_type tgt_type; |
303
1ec946a39a92
nvlist: conditional conversion of values
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
292
diff
changeset
|
51 enum nvcvtcond cond; |
274
c35b1f62bcac
nvlist: value type conversion code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
271
diff
changeset
|
52 }; |
c35b1f62bcac
nvlist: value type conversion code
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
271
diff
changeset
|
53 |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
54 #define nvl_alloc() ((struct nvlist *) val_alloc_nvl()) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
55 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
56 /* |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
57 * struct val reference counting & casting to struct nvl |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
58 */ |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
59 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
60 static inline struct nvlist *val_cast_to_nvl(struct val *val) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
61 { |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
62 ASSERT(!val || (val->type == VT_NVL)); |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
63 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
64 return container_of(val, struct nvlist, val); |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
65 } |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
66 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
67 #define val_getref_nvl(v) val_cast_to_nvl(val_getref(v)) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
68 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
69 /* |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
70 * struct nvl reference counting & casting to struct val |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
71 */ |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
72 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
73 #define nvl_getref(nvl) ((struct nvlist *) val_getref(nvl_cast_to_val(nvl))) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
74 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
75 #define nvl_putref(nvl) val_putref(nvl_cast_to_val(nvl)) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
76 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
77 #define nvl_getref_val(nvl) val_getref(nvl_cast_to_val(nvl)) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
78 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
79 static inline struct val *nvl_cast_to_val(struct nvlist *nvl) |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
80 { |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
81 return &nvl->val; |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
82 } |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
83 |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
84 /* |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
85 * Misc functions |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
86 */ |
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
87 |
263
d6e7f03dc963
nvlist: implement merging of nvlists
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
262
diff
changeset
|
88 extern int nvl_merge(struct nvlist *dest, struct nvlist *src); |
399
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
89 |
477
2d83f251404d
nvl: re-add nvl_dump_file to dump an nvlist
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
468
diff
changeset
|
90 static inline void nvl_dump_file(FILE *out, struct nvlist *nvl) |
2d83f251404d
nvl: re-add nvl_dump_file to dump an nvlist
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
468
diff
changeset
|
91 { |
2d83f251404d
nvl: re-add nvl_dump_file to dump an nvlist
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
468
diff
changeset
|
92 val_dump_file(out, nvl_cast_to_val(nvl), 0); |
2d83f251404d
nvl: re-add nvl_dump_file to dump an nvlist
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
468
diff
changeset
|
93 } |
2d83f251404d
nvl: re-add nvl_dump_file to dump an nvlist
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
468
diff
changeset
|
94 |
399
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
95 /* |
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
96 * If convert_all is true, then all errors except -ENOTSUP encountered |
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
97 * during the conversion are ignored. |
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
98 */ |
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
99 extern int nvl_convert(struct nvlist *nvl, const struct nvl_convert_info *table, |
a3629041d89c
nvlist: add an option to continue converting on most errors
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
345
diff
changeset
|
100 bool convert_all); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
101 |
265
6cc52ba25b46
nvlist: pack framework
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
263
diff
changeset
|
102 /* serialization & deserialization */ |
6cc52ba25b46
nvlist: pack framework
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
263
diff
changeset
|
103 extern struct nvlist *nvl_unpack(const void *ptr, size_t len, |
466
8635533bc2b6
val: rename nvformat to val_format
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
464
diff
changeset
|
104 enum val_format format); |
265
6cc52ba25b46
nvlist: pack framework
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
263
diff
changeset
|
105 |
468
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
106 static inline ssize_t nvl_size(struct nvlist *nvl, enum val_format format) |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
107 { |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
108 return val_size(nvl_cast_to_val(nvl), format); |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
109 } |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
110 |
567
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
111 static inline ssize_t nvl_pack_into(struct nvlist *nvl, |
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
112 void *buf, size_t bufsize, |
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
113 enum val_format format) |
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
114 { |
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
115 return val_pack_into(nvl_cast_to_val(nvl), buf, bufsize, format); |
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
116 } |
342a128c5011
nvl: add nvl_pack_into wrapper around val_pack_into
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
525
diff
changeset
|
117 |
468
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
118 static inline struct buffer *nvl_pack(struct nvlist *nvl, |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
119 enum val_format format) |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
120 { |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
121 return val_pack(nvl_cast_to_val(nvl), format); |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
122 } |
c075052024ac
val: introduce packing & unpacking API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
466
diff
changeset
|
123 |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
124 /* iteration */ |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
125 extern const struct nvpair *nvl_iter_start(struct nvlist *nvl); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
126 extern const struct nvpair *nvl_iter_next(struct nvlist *nvl, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
127 const struct nvpair *prev); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
128 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
129 #define nvl_for_each(pair, nvl) \ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
130 for (pair = nvl_iter_start(nvl); \ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
131 pair != NULL; \ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
132 pair = nvl_iter_next(nvl, pair)) |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
133 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
134 /* |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
135 * There are two types of lookup functions - those that return a pointer and |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
136 * those than return an int. The functions that return a pointer either |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
137 * return a valid pointer with a new reference or an errno. The functions |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
138 * that return an int, return 0 and set the out argument to the value or |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
139 * return an errno. |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
140 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
141 * -ENOENT = not found |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
142 * -ERANGE = wrong type (e.g., looking up an int, but stored value is a string) |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
143 */ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
144 extern int nvl_lookup_array(struct nvlist *nvl, const char *name, |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
145 struct val ***vals, size_t *nelem); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
146 extern int nvl_lookup_blob(struct nvlist *nvl, const char *name, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
147 const void **ptr, size_t *size); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
148 extern int nvl_lookup_bool(struct nvlist *nvl, const char *name, bool *out); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
149 extern int nvl_lookup_int(struct nvlist *nvl, const char *name, uint64_t *out); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
150 extern int nvl_lookup_null(struct nvlist *nvl, const char *name); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
151 extern const struct nvpair *nvl_lookup(struct nvlist *nvl, const char *name); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
152 extern struct nvlist *nvl_lookup_nvl(struct nvlist *nvl, const char *name); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
153 extern struct str *nvl_lookup_str(struct nvlist *nvl, const char *name); |
822
f8d9ccf26563
nvl: add nvl_lookup_val to easily get at the struct val pointer value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
567
diff
changeset
|
154 extern struct val *nvl_lookup_val(struct nvlist *nvl, const char *name); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
155 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
156 /* |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
157 * Add a new key-value pair or change the value of an existing key-value |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
158 * pair. |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
159 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
160 * always consume val's reference |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
161 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
162 * -ENOMEM = out of memory |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
163 */ |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
164 extern int nvl_set(struct nvlist *nvl, const char *name, struct val *val); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
165 extern int nvl_set_array(struct nvlist *nvl, const char *name, |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
166 struct val **vals, size_t nelem); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
167 extern int nvl_set_array_copy(struct nvlist *nvl, const char *name, |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
168 struct val **vals, size_t nelem); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
169 extern int nvl_set_blob(struct nvlist *nvl, const char *name, void *ptr, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
170 size_t size); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
171 extern int nvl_set_blob_copy(struct nvlist *nvl, const char *name, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
172 const void *ptr, size_t size); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
173 extern int nvl_set_bool(struct nvlist *nvl, const char *name, bool val); |
271
f4197a2432cb
nvl: allow setting C strings
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
266
diff
changeset
|
174 extern int nvl_set_cstr_dup(struct nvlist *nvl, const char *name, |
f4197a2432cb
nvl: allow setting C strings
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
266
diff
changeset
|
175 const char *val); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
176 extern int nvl_set_int(struct nvlist *nvl, const char *name, uint64_t val); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
177 extern int nvl_set_null(struct nvlist *nvl, const char *name); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
178 extern int nvl_set_nvl(struct nvlist *nvl, const char *name, struct nvlist *val); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
179 extern int nvl_set_str(struct nvlist *nvl, const char *name, struct str *val); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
180 |
494
9d68f987d81e
nvl: add a function to set a <key,value> pair based on an nvpair
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
492
diff
changeset
|
181 extern int nvl_set_pair(struct nvlist *nvl, const struct nvpair *pair); |
9d68f987d81e
nvl: add a function to set a <key,value> pair based on an nvpair
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
492
diff
changeset
|
182 |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
183 /* |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
184 * Remove a key-value pair from the list. |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
185 * |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
186 * -ENOENT = not found |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
187 * -ERANGE = existing item's type doesn't match requested type |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
188 */ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
189 extern int nvl_unset(struct nvlist *nvl, const char *name); |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
190 extern int nvl_unset_type(struct nvlist *nvl, const char *name, enum val_type type); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
191 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
192 /* |
277
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
193 * Check existence of a specific key, or key-valuetype pair from the list. |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
194 * |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
195 * The generic nvl_exists returns true if the item exists and false |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
196 * otherwise. |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
197 * |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
198 * The type-specific checks return: |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
199 * |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
200 * -ENOENT = does not exist |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
201 * -ERANGE = exists, wrong type |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
202 * 0 = exists, correct type |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
203 */ |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
204 extern bool nvl_exists(struct nvlist *nvl, const char *name); |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
205 extern int nvl_exists_type(struct nvlist *nvl, const char *name, |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
206 enum val_type type); |
277
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
207 |
4360936c2808
nvlist: add functions to check for existence of a certain key
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
274
diff
changeset
|
208 /* |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
209 * nvpair related functions |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
210 */ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
211 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
212 static inline const char *nvpair_name(const struct nvpair *pair) |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
213 { |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
214 return str_cstr(pair->name); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
215 } |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
216 |
492
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
217 static inline struct str *nvpair_name_str(const struct nvpair *pair) |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
218 { |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
219 return str_getref(pair->name); |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
220 } |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
221 |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
222 static inline enum val_type nvpair_type(const struct nvpair *pair) |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
223 { |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
224 return pair->value->type; |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
225 } |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
226 |
492
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
227 static inline struct val *nvpair_value(const struct nvpair *pair) |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
228 { |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
229 return val_getref(pair->value); |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
230 } |
1826b5291ff5
nvl: add helpers to get a struct str/val reference of a pair's name/value
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
477
diff
changeset
|
231 |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
232 /* |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
233 * As with the nvl_lookup_* functions, there return either a pointer or an |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
234 * integer. The meaning of the return values is the same as well. |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
235 */ |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
236 extern int nvpair_value_array(const struct nvpair *pair, |
464
b1e4c7607050
val: introduce VT_NVL
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
399
diff
changeset
|
237 struct val ***vals, size_t *nelem); |
262
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
238 extern int nvpair_value_blob(const struct nvpair *pair, |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
239 const void **ptr, size_t *size); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
240 extern int nvpair_value_bool(const struct nvpair *pair, bool *out); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
241 extern int nvpair_value_int(const struct nvpair *pair, uint64_t *out); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
242 extern int nvpair_value_null(const struct nvpair *pair); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
243 extern struct nvlist *nvpair_value_nvl(const struct nvpair *pair); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
244 extern struct str *nvpair_value_str(const struct nvpair *pair); |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
245 |
89bf89fc814c
nvlist: introduce a name-value list API
Josef 'Jeff' Sipek <jeffpc@josefsipek.net>
parents:
diff
changeset
|
246 #endif |