summaryrefslogtreecommitdiffstats
path: root/sbin
diff options
context:
space:
mode:
authorpjd <pjd@FreeBSD.org>2010-10-24 17:24:08 +0000
committerpjd <pjd@FreeBSD.org>2010-10-24 17:24:08 +0000
commit9eb542816d93ddad2b6f71e9fdcac572b7b6d758 (patch)
tree8d679e864085f0f575ed38b355894e855c99b5d3 /sbin
parentcd45fc19c2ccd171da623767221828ae5508ea64 (diff)
downloadFreeBSD-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
Diffstat (limited to 'sbin')
-rw-r--r--sbin/hastd/nv.c28
-rw-r--r--sbin/hastd/nv.h1
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_ */
OpenPOWER on IntegriCloud