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