From f04cfd27e2d67b0fc89b079410fc11b55b6d1979 Mon Sep 17 00:00:00 2001 From: Garrett D'Amore Date: Tue, 29 Aug 2017 14:17:11 -0700 Subject: Add improved getopt functions, pass integers by value. --- src/core/options.c | 47 ++++++++++++++++++++++++++++++++++++----------- 1 file changed, 36 insertions(+), 11 deletions(-) (limited to 'src/core/options.c') diff --git a/src/core/options.c b/src/core/options.c index 4027564c..76025710 100644 --- a/src/core/options.c +++ b/src/core/options.c @@ -123,44 +123,69 @@ nni_setopt_size(size_t *sp, const void *v, size_t sz, size_t minv, size_t maxv) } int -nni_getopt_usec(nni_duration *ptr, void *val, size_t *sizep) +nni_getopt_usec(nni_duration u, void *val, size_t *sizep) { - size_t sz = sizeof(*ptr); + size_t sz = sizeof(u); if (sz > *sizep) { sz = *sizep; } - *sizep = sizeof(*ptr); - memcpy(val, ptr, sz); + *sizep = sizeof(u); + memcpy(val, &u, sz); return (0); } int -nni_getopt_int(int *ptr, void *val, size_t *sizep) +nni_getopt_int(int i, void *val, size_t *sizep) { - size_t sz = sizeof(*ptr); + size_t sz = sizeof(i); if (sz > *sizep) { sz = *sizep; } - *sizep = sizeof(*ptr); - memcpy(val, ptr, sz); + *sizep = sizeof(i); + memcpy(val, &i, sz); return (0); } int -nni_getopt_size(size_t *ptr, void *val, size_t *sizep) +nni_getopt_u64(const uint64_t u, void *val, size_t *sizep) { - size_t sz = sizeof(*ptr); + size_t sz = sizeof(u); if (sz > *sizep) { sz = *sizep; } - *sizep = sizeof(*ptr); + *sizep = sizeof(u); + memcpy(val, &u, sz); + return (0); +} + +int +nni_getopt_str(const char *ptr, void *val, size_t *sizep) +{ + size_t len = strlen(ptr) + 1; + size_t sz; + + sz = (len > *sizep) ? *sizep : len; + *sizep = len; memcpy(val, ptr, sz); return (0); } +int +nni_getopt_size(size_t u, void *val, size_t *sizep) +{ + size_t sz = sizeof(u); + + if (sz > *sizep) { + sz = *sizep; + } + *sizep = sizeof(u); + memcpy(val, &u, sz); + return (0); +} + int nni_setopt_buf(nni_msgq *mq, const void *val, size_t sz) { -- cgit v1.2.3-70-g09d2