svn commit: r214283 - head/sbin/hastd

Pawel Jakub Dawidek pjd at FreeBSD.org
Sun Oct 24 17:24:08 UTC 2010


Author: pjd
Date: Sun Oct 24 17:24:08 2010
New Revision: 214283
URL: http://svn.freebsd.org/changeset/base/214283

Log:
  Implement nv_exists() function that returns true if argument of the given
  name exists.
  
  MFC after:	3 days

Modified:
  head/sbin/hastd/nv.c
  head/sbin/hastd/nv.h

Modified: head/sbin/hastd/nv.c
==============================================================================
--- head/sbin/hastd/nv.c	Sun Oct 24 17:22:34 2010	(r214282)
+++ head/sbin/hastd/nv.c	Sun Oct 24 17:24:08 2010	(r214283)
@@ -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 
 	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 c
 		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;

Modified: head/sbin/hastd/nv.h
==============================================================================
--- head/sbin/hastd/nv.h	Sun Oct 24 17:22:34 2010	(r214282)
+++ head/sbin/hastd/nv.h	Sun Oct 24 17:24:08 2010	(r214283)
@@ -126,6 +126,7 @@ const uint64_t *nv_get_uint64_array(stru
 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_ */


More information about the svn-src-all mailing list