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