aboutsummaryrefslogtreecommitdiff
path: root/src/core/options.c
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/options.c')
-rw-r--r--src/core/options.c34
1 files changed, 7 insertions, 27 deletions
diff --git a/src/core/options.c b/src/core/options.c
index 82735369..5de87c61 100644
--- a/src/core/options.c
+++ b/src/core/options.c
@@ -1,5 +1,5 @@
//
-// Copyright 2018 Staysail Systems, Inc. <info@staysail.tech>
+// Copyright 2020 Staysail Systems, Inc. <info@staysail.tech>
// Copyright 2018 Capitar IT Group BV <info@capitar.com>
// Copyright 2018 Devolutions <info@devolutions.net>
//
@@ -55,6 +55,7 @@ nni_copyin_bool(bool *bp, const void *v, size_t sz, nni_type t)
if (sz != sizeof(bool)) {
return (NNG_EINVAL);
}
+ // NB: C99 does not require that sizeof (bool) == 1.
if (bp != NULL) {
memcpy(bp, v, sz);
}
@@ -158,15 +159,18 @@ nni_copyin_str(char *s, const void *v, size_t sz, size_t maxsz, nni_type t)
switch (t) {
case NNI_TYPE_STRING:
+ z = v == NULL ? 0 : strlen(v);
+ break;
case NNI_TYPE_OPAQUE:
- if ((z = nni_strnlen(v, sz)) >= sz) {
+ z = v == NULL ? 0 : nni_strnlen(v, sz);
+ if (z >= sz) {
return (NNG_EINVAL); // missing terminator
}
break;
default:
return (NNG_EBADTYPE);
}
- if (z > maxsz) {
+ if (z >= maxsz) {
return (NNG_EINVAL); // too long
}
if (s != NULL) {
@@ -245,7 +249,6 @@ nni_copyout_bool(bool b, void *dst, size_t *szp, nni_type t)
{
switch (t) {
case NNI_TYPE_BOOL:
- NNI_ASSERT(*szp == sizeof(b));
*(bool *) dst = b;
return (0);
case NNI_TYPE_OPAQUE:
@@ -260,7 +263,6 @@ nni_copyout_int(int i, void *dst, size_t *szp, nni_type t)
{
switch (t) {
case NNI_TYPE_INT32:
- NNI_ASSERT(*szp == sizeof(i));
*(int *) dst = i;
return (0);
case NNI_TYPE_OPAQUE:
@@ -275,7 +277,6 @@ nni_copyout_ms(nng_duration d, void *dst, size_t *szp, nni_type t)
{
switch (t) {
case NNI_TYPE_DURATION:
- NNI_ASSERT(*szp == sizeof(d));
*(nng_duration *) dst = d;
return (0);
case NNI_TYPE_OPAQUE:
@@ -290,7 +291,6 @@ nni_copyout_ptr(void *p, void *dst, size_t *szp, nni_type t)
{
switch (t) {
case NNI_TYPE_POINTER:
- NNI_ASSERT(*szp == sizeof(p));
*(void **) dst = p;
return (0);
case NNI_TYPE_OPAQUE:
@@ -305,7 +305,6 @@ nni_copyout_size(size_t s, void *dst, size_t *szp, nni_type t)
{
switch (t) {
case NNI_TYPE_SIZE:
- NNI_ASSERT(*szp == sizeof(s));
*(size_t *) dst = s;
return (0);
case NNI_TYPE_OPAQUE:
@@ -321,7 +320,6 @@ nni_copyout_sockaddr(
{
switch (t) {
case NNI_TYPE_SOCKADDR:
- NNI_ASSERT(*szp == sizeof(*sap));
*(nng_sockaddr *) dst = *sap;
return (0);
case NNI_TYPE_OPAQUE:
@@ -336,7 +334,6 @@ nni_copyout_u64(uint64_t u, void *dst, size_t *szp, nni_type t)
{
switch (t) {
case NNI_TYPE_UINT64:
- NNI_ASSERT(*szp == sizeof(u));
*(uint64_t *) dst = u;
return (0);
case NNI_TYPE_OPAQUE:
@@ -353,7 +350,6 @@ nni_copyout_str(const char *str, void *dst, size_t *szp, nni_type t)
switch (t) {
case NNI_TYPE_STRING:
- NNI_ASSERT(*szp == sizeof(char *));
if ((s = nni_strdup(str)) == NULL) {
return (NNG_ENOMEM);
}
@@ -399,19 +395,3 @@ nni_setopt(const nni_option *opts, const char *nm, void *arg, const void *buf,
}
return (NNG_ENOTSUP);
}
-
-int
-nni_chkopt(const nni_chkoption *opts, const char *nm, const void *buf,
- size_t sz, nni_type t)
-{
- while (opts->o_name != NULL) {
- if (strcmp(opts->o_name, nm) == 0) {
- if (opts->o_check == NULL) {
- return (NNG_EREADONLY);
- }
- return (opts->o_check(buf, sz, t));
- }
- opts++;
- }
- return (NNG_ENOTSUP);
-} \ No newline at end of file