xref: /illumos-gate/usr/src/compat/bhyve/sys/nv.h (revision 2b9481465d6ee67ac62c160dbf79c3ec3348c611)
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