1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
|
/*
* This file and its contents are supplied under the terms of the
* Common Development and Distribution License ("CDDL"), version 1.0.
* You may only use this file in accordance with the terms of version
* 1.0 of the CDDL.
*
* A full copy of the text of the CDDL should have accompanied this
* source. A copy of the CDDL is also available via the Internet at
* http://www.illumos.org/license/CDDL.
*/
/*
* Copyright 2021 OmniOS Community Edition (OmniOSce) Association.
*/
#ifndef _COMPAT_FREEBSD_SYS_NV_H_
#define _COMPAT_FREEBSD_SYS_NV_H_
#include <assert.h>
#include <libnvpair.h>
#define NV_TYPE_NVLIST DATA_TYPE_NVLIST
#define NV_TYPE_STRING DATA_TYPE_STRING
static inline const char *
nvlist_next(const nvlist_t *nvl, int *type, void **cookie)
{
nvpair_t *nvp = *cookie;
nvp = nvlist_next_nvpair((nvlist_t *)nvl, nvp);
if (nvp == NULL)
return (NULL);
*cookie = nvp;
*type = nvpair_type(nvp);
return (nvpair_name(nvp));
}
static inline nvlist_t *
nvlist_create(int flag)
{
nvlist_t *nvl;
/*
* We only emulate this with flag == 0, which is equivalent to the
* illumos NV_UNIQUE_NAME.
*/
assert(flag == 0);
if (nvlist_alloc(&nvl, NV_UNIQUE_NAME, 0) != 0)
return (NULL);
return (nvl);
}
static inline bool
nvlist_exists_nvlist(const nvlist_t *nvl, const char *name)
{
nvlist_t *snvl;
return (nvlist_lookup_nvlist((nvlist_t *)nvl, name, &snvl) == 0);
}
static inline nvlist_t *
nvlist_get_nvlist(const nvlist_t *nvl, const char *name)
{
nvlist_t *snvl;
if (nvlist_lookup_nvlist((nvlist_t *)nvl, name, &snvl) == 0)
return (snvl);
return (NULL);
}
static inline bool
nvlist_exists_string(const nvlist_t *nvl, const char *name)
{
char *str;
return (nvlist_lookup_string((nvlist_t *)nvl, name, &str) == 0);
}
static inline char *
nvlist_get_string(const nvlist_t *nvl, const char *name)
{
char *str;
if (nvlist_lookup_string((nvlist_t *)nvl, name, &str) == 0)
return (str);
return (NULL);
}
#define nvlist_free_string(nvl, name) nvlist_remove_all((nvl), (name))
#endif /* _COMPAT_FREEBSD_SYS_NV_H_ */
|