mirror of
https://git.FreeBSD.org/src.git
synced 2024-12-04 09:09:56 +00:00
Implement nv_exists() function that returns true if argument of the given
name exists. MFC after: 3 days
This commit is contained in:
parent
3dea75d2a8
commit
b9ffbb0a94
Notes:
svn2git
2020-12-20 02:59:44 +00:00
svn path=/head/; revision=214283
@ -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;
|
||||
|
@ -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_ */
|
||||
|
Loading…
Reference in New Issue
Block a user