Lines Matching refs:nv

47 #include "nv.h"
87 struct nv {
108 #define NV_CHECK(nv) do { \
109 PJDLOG_ASSERT((nv) != NULL); \
110 PJDLOG_ASSERT((nv)->nv_magic == NV_MAGIC); \
113 static void nv_add(struct nv *nv, const unsigned char *value, size_t vsize,
115 static void nv_addv(struct nv *nv, const unsigned char *value, size_t vsize,
117 static struct nvhdr *nv_find(struct nv *nv, int type, const char *namefmt,
122 * Allocate and initialize new nv structure.
125 struct nv *
128 struct nv *nv;
130 nv = malloc(sizeof(*nv));
131 if (nv == NULL)
133 nv->nv_ebuf = ebuf_alloc(0);
134 if (nv->nv_ebuf == NULL) {
135 free(nv);
138 nv->nv_error = 0;
139 nv->nv_magic = NV_MAGIC;
140 return (nv);
144 * Free the given nv structure.
147 nv_free(struct nv *nv)
150 if (nv == NULL)
153 NV_CHECK(nv);
155 nv->nv_magic = 0;
156 ebuf_free(nv->nv_ebuf);
157 free(nv);
161 * Return error for the given nv structure.
164 nv_error(const struct nv *nv)
167 if (nv == NULL)
170 NV_CHECK(nv);
172 return (nv->nv_error);
176 * Set error for the given nv structure and return previous error.
179 nv_set_error(struct nv *nv, int error)
183 if (nv == NULL)
186 NV_CHECK(nv);
188 preverr = nv->nv_error;
189 nv->nv_error = error;
194 * Validate correctness of the entire nv structure and all its elements.
198 nv_validate(struct nv *nv, size_t *extrap)
205 if (nv == NULL) {
210 NV_CHECK(nv);
211 PJDLOG_ASSERT(nv->nv_error == 0);
216 ptr = ebuf_data(nv->nv_ebuf, &size);
328 if (nv->nv_error == 0)
329 nv->nv_error = error;
338 * Convert the given nv structure to network byte order and return ebuf
342 nv_hton(struct nv *nv)
348 NV_CHECK(nv);
349 PJDLOG_ASSERT(nv->nv_error == 0);
351 ptr = ebuf_data(nv->nv_ebuf, &size);
365 return (nv->nv_ebuf);
369 * Create nv structure based on ebuf received from the network.
371 struct nv *
374 struct nv *nv;
380 nv = malloc(sizeof(*nv));
381 if (nv == NULL)
383 nv->nv_error = 0;
384 nv->nv_ebuf = eb;
385 nv->nv_magic = NV_MAGIC;
387 if (nv_validate(nv, &extra) == -1) {
389 nv->nv_magic = 0;
390 free(nv);
399 return (nv);
404 nv_add_##type(struct nv *nv, type##_t value, const char *namefmt, ...) \
409 nv_addv(nv, (unsigned char *)&value, sizeof(value), \
427 nv_add_##type##_array(struct nv *nv, const type##_t *value, \
433 nv_addv(nv, (const unsigned char *)value, \
451 nv_add_string(struct nv *nv, const char *value, const char *namefmt, ...)
459 nv_addv(nv, (const unsigned char *)value, size, NV_TYPE_STRING,
465 nv_add_stringf(struct nv *nv, const char *name, const char *valuefmt, ...)
470 nv_add_stringv(nv, name, valuefmt, valueap);
475 nv_add_stringv(struct nv *nv, const char *name, const char *valuefmt,
483 if (nv->nv_error == 0)
484 nv->nv_error = ENOMEM;
488 nv_add(nv, (const unsigned char *)value, size, NV_TYPE_STRING, name);
494 nv_get_##type(struct nv *nv, const char *namefmt, ...) \
501 nvh = nv_find(nv, NV_TYPE_##TYPE, namefmt, nameap); \
525 nv_get_##type##_array(struct nv *nv, size_t *sizep, \
532 nvh = nv_find(nv, NV_TYPE_##TYPE##_ARRAY, namefmt, nameap); \
555 nv_get_string(struct nv *nv, const char *namefmt, ...)
562 nvh = nv_find(nv, NV_TYPE_STRING, namefmt, nameap);
575 nv_vexists(struct nv *nv, const char *namefmt, va_list nameap)
580 if (nv == NULL)
584 snverror = nv->nv_error;
586 nvh = nv_find(nv, NV_TYPE_NONE, namefmt, nameap);
589 nv->nv_error = snverror;
595 nv_exists(struct nv *nv, const char *namefmt, ...)
601 ret = nv_vexists(nv, namefmt, nameap);
608 nv_assert(struct nv *nv, const char *namefmt, ...)
613 PJDLOG_ASSERT(nv_vexists(nv, namefmt, nameap));
618 * Dump content of the nv structure.
621 nv_dump(struct nv *nv)
629 if (nv_validate(nv, NULL) == -1) {
634 NV_CHECK(nv);
635 PJDLOG_ASSERT(nv->nv_error == 0);
637 ptr = ebuf_data(nv->nv_ebuf, &size);
758 nv_add(struct nv *nv, const unsigned char *value, size_t vsize, int type,
765 if (nv == NULL) {
770 NV_CHECK(nv);
776 if (nv->nv_error == 0)
777 nv->nv_error = ENOMEM;
786 if (ebuf_add_tail(nv->nv_ebuf, nvh, NVH_HSIZE(nvh)) == -1) {
788 if (nv->nv_error == 0)
789 nv->nv_error = errno;
795 if (ebuf_add_tail(nv->nv_ebuf, value, vsize) == -1) {
797 if (nv->nv_error == 0)
798 nv->nv_error = errno;
806 if (ebuf_add_tail(nv->nv_ebuf, align, vsize) == -1) {
808 if (nv->nv_error == 0)
809 nv->nv_error = errno;
815 nv_addv(struct nv *nv, const unsigned char *value, size_t vsize, int type,
824 nv_add(nv, value, vsize, type, name);
828 nv_find(struct nv *nv, int type, const char *namefmt, va_list nameap)
835 if (nv == NULL) {
840 NV_CHECK(nv);
846 ptr = ebuf_data(nv->nv_ebuf, &size);
856 if (nv->nv_error == 0)
857 nv->nv_error = EINVAL;
866 if (nv->nv_error == 0)
867 nv->nv_error = ENOENT;