nvpair_impl.h revision 279438
155714Skris/*-
2290207Sjkim * Copyright (c) 2009-2013 The FreeBSD Foundation
355714Skris * All rights reserved.
4237657Sjkim *
555714Skris * This software was developed by Pawel Jakub Dawidek under sponsorship from
655714Skris * the FreeBSD Foundation.
755714Skris *
855714Skris * Redistribution and use in source and binary forms, with or without
955714Skris * modification, are permitted provided that the following conditions
1055714Skris * are met:
1155714Skris * 1. Redistributions of source code must retain the above copyright
1255714Skris *    notice, this list of conditions and the following disclaimer.
1355714Skris * 2. Redistributions in binary form must reproduce the above copyright
1459191Skris *    notice, this list of conditions and the following disclaimer in the
1559191Skris *    documentation and/or other materials provided with the distribution.
1659191Skris *
17160814Ssimon * THIS SOFTWARE IS PROVIDED BY THE AUTHORS AND CONTRIBUTORS ``AS IS'' AND
1855714Skris * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
1955714Skris * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
2055714Skris * ARE DISCLAIMED.  IN NO EVENT SHALL THE AUTHORS OR CONTRIBUTORS BE LIABLE
2155714Skris * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
2255714Skris * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
23160814Ssimon * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
2455714Skris * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
2555714Skris * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
2655714Skris * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
2755714Skris * SUCH DAMAGE.
2855714Skris *
2955714Skris * $FreeBSD: head/lib/libnv/nvpair_impl.h 279438 2015-03-01 00:22:53Z rstone $
3055714Skris */
3155714Skris
3255714Skris#ifndef	_NVPAIR_IMPL_H_
3355714Skris#define	_NVPAIR_IMPL_H_
3455714Skris
3555714Skris#include <sys/queue.h>
3655714Skris
3755714Skris#ifndef _KERNEL
3855714Skris#include <stdint.h>
39194206Ssimon#endif
40194206Ssimon
41194206Ssimon#include "nv.h"
42194206Ssimon
43194206SsimonTAILQ_HEAD(nvl_head, nvpair);
44194206Ssimon
45194206Ssimonvoid nvpair_assert(const nvpair_t *nvp);
4655714Skrisnvlist_t *nvpair_nvlist(const nvpair_t *nvp);
4755714Skrisnvpair_t *nvpair_next(const nvpair_t *nvp);
4855714Skrisnvpair_t *nvpair_prev(const nvpair_t *nvp);
4955714Skrisvoid nvpair_insert(struct nvl_head *head, nvpair_t *nvp, nvlist_t *nvl);
5055714Skrisvoid nvpair_remove(struct nvl_head *head, nvpair_t *nvp, const nvlist_t *nvl);
5155714Skrissize_t nvpair_header_size(void);
5255714Skrissize_t nvpair_size(const nvpair_t *nvp);
5355714Skrisconst unsigned char *nvpair_unpack(bool isbe, const unsigned char *ptr,
5455714Skris    size_t *leftp, nvpair_t **nvpp);
5555714Skrisvoid nvpair_free_structure(nvpair_t *nvp);
5655714Skrisvoid nvpair_init_datasize(nvpair_t *nvp);
57160814Ssimonconst char *nvpair_type_string(int type);
5855714Skris
59160814Ssimon/* Pack functions. */
6055714Skrisunsigned char *nvpair_pack_header(const nvpair_t *nvp, unsigned char *ptr,
61160814Ssimon    size_t *leftp);
6255714Skrisunsigned char *nvpair_pack_null(const nvpair_t *nvp, unsigned char *ptr,
6355714Skris    size_t *leftp);
6455714Skrisunsigned char *nvpair_pack_bool(const nvpair_t *nvp, unsigned char *ptr,
6555714Skris    size_t *leftp);
6689837Skrisunsigned char *nvpair_pack_number(const nvpair_t *nvp, unsigned char *ptr,
6755714Skris    size_t *leftp);
6855714Skrisunsigned char *nvpair_pack_string(const nvpair_t *nvp, unsigned char *ptr,
6955714Skris    size_t *leftp);
7055714Skrisunsigned char *nvpair_pack_descriptor(const nvpair_t *nvp, unsigned char *ptr,
7155714Skris    int64_t *fdidxp, size_t *leftp);
7255714Skrisunsigned char *nvpair_pack_binary(const nvpair_t *nvp, unsigned char *ptr,
7355714Skris    size_t *leftp);
7455714Skrisunsigned char *nvpair_pack_nvlist_up(unsigned char *ptr, size_t *leftp);
7555714Skris
7655714Skris/* Unpack data functions. */
7755714Skrisconst unsigned char *nvpair_unpack_header(bool isbe, nvpair_t *nvp,
7855714Skris    const unsigned char *ptr, size_t *leftp);
7955714Skrisconst unsigned char *nvpair_unpack_null(bool isbe, nvpair_t *nvp,
8055714Skris    const unsigned char *ptr, size_t *leftp);
8155714Skrisconst unsigned char *nvpair_unpack_bool(bool isbe, nvpair_t *nvp,
8255714Skris    const unsigned char *ptr, size_t *leftp);
8355714Skrisconst unsigned char *nvpair_unpack_number(bool isbe, nvpair_t *nvp,
84160814Ssimon    const unsigned char *ptr, size_t *leftp);
8559191Skrisconst unsigned char *nvpair_unpack_string(bool isbe, nvpair_t *nvp,
8659191Skris    const unsigned char *ptr, size_t *leftp);
87160814Ssimonconst unsigned char *nvpair_unpack_nvlist(bool isbe, nvpair_t *nvp,
8859191Skris    const unsigned char *ptr, size_t *leftp, size_t nvlist, nvlist_t **child);
8959191Skrisconst unsigned char *nvpair_unpack_descriptor(bool isbe, nvpair_t *nvp,
9059191Skris    const unsigned char *ptr, size_t *leftp, const int *fds, size_t nfds);
9159191Skrisconst unsigned char *nvpair_unpack_binary(bool isbe, nvpair_t *nvp,
9255714Skris    const unsigned char *ptr, size_t *leftp);
9355714Skris
9455714Skris#endif	/* !_NVPAIR_IMPL_H_ */
9555714Skris