diff options
author | pjd <pjd@FreeBSD.org> | 2010-10-24 17:24:08 +0000 |
---|---|---|
committer | pjd <pjd@FreeBSD.org> | 2010-10-24 17:24:08 +0000 |
commit | 9eb542816d93ddad2b6f71e9fdcac572b7b6d758 (patch) | |
tree | 8d679e864085f0f575ed38b355894e855c99b5d3 | |
parent | cd45fc19c2ccd171da623767221828ae5508ea64 (diff) | |
download | FreeBSD-src-9eb542816d93ddad2b6f71e9fdcac572b7b6d758.zip FreeBSD-src-9eb542816d93ddad2b6f71e9fdcac572b7b6d758.tar.gz |
Implement nv_exists() function that returns true if argument of the given
name exists.
MFC after: 3 days
-rw-r--r-- | sbin/hastd/nv.c | 28 | ||||
-rw-r--r-- | sbin/hastd/nv.h | 1 |
2 files changed, 28 insertions, 1 deletions
diff --git a/sbin/hastd/nv.c b/sbin/hastd/nv.c index a0de09a..aa37fcf 100644 --- a/sbin/hastd/nv.c +++ b/sbin/hastd/nv.c @@ -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; diff --git a/sbin/hastd/nv.h b/sbin/hastd/nv.h index 7aee3c4..664557e 100644 --- a/sbin/hastd/nv.h +++ b/sbin/hastd/nv.h @@ -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_ */ |