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_ */
_______________________________________________
svn-src-head@freebsd.org mailing list
http://lists.freebsd.org/mailman/listinfo/svn-src-head
To unsubscribe, send any mail to "svn-src-head-unsubscr...@freebsd.org"

Reply via email to