Implement nv_exists() function that returns true if argument of the given

name exists.

MFC after:	3 days
This commit is contained in:
Pawel Jakub Dawidek 2010-10-24 17:24:08 +00:00
parent 3dea75d2a8
commit b9ffbb0a94
Notes: svn2git 2020-12-20 02:59:44 +00:00
svn path=/head/; revision=214283
2 changed files with 28 additions and 1 deletions

View File

@ -46,6 +46,8 @@ __FBSDID("$FreeBSD$");
#include <ebuf.h>
#include <nv.h>
#define NV_TYPE_NONE 0
#define NV_TYPE_INT8 1
#define NV_TYPE_UINT8 2
#define NV_TYPE_INT16 3
@ -561,6 +563,29 @@ nv_get_string(struct nv *nv, const char *namefmt, ...)
return (str);
}
bool
nv_exists(struct nv *nv, const char *namefmt, ...)
{
struct nvhdr *nvh;
va_list nameap;
int snverror, serrno;
if (nv == NULL)
return (false);
serrno = errno;
snverror = nv->nv_error;
va_start(nameap, namefmt);
nvh = nv_find(nv, NV_TYPE_NONE, namefmt, nameap);
va_end(nameap);
errno = serrno;
nv->nv_error = snverror;
return (nvh != NULL);
}
/*
* Dump content of the nv structure.
*/
@ -797,7 +822,8 @@ nv_find(struct nv *nv, int type, const char *namefmt, va_list nameap)
assert(size >= NVH_SIZE(nvh));
nv_swap(nvh, true);
if (strcmp(nvh->nvh_name, name) == 0) {
if ((nvh->nvh_type & NV_TYPE_MASK) != type) {
if (type != NV_TYPE_NONE &&
(nvh->nvh_type & NV_TYPE_MASK) != type) {
errno = EINVAL;
if (nv->nv_error == 0)
nv->nv_error = EINVAL;

View File

@ -126,6 +126,7 @@ const uint64_t *nv_get_uint64_array(struct nv *nv, size_t *sizep,
const char *nv_get_string(struct nv *nv, const char *namefmt, ...)
__printflike(2, 3);
bool nv_exists(struct nv *nv, const char *namefmt, ...) __printflike(2, 3);
void nv_dump(struct nv *nv);
#endif /* !_NV_H_ */