The selftest argument is converted with atoi(), so a malformed value is silently taken as zero. Make it a bool and use rte_kvargs_handle_bool, which rejects anything which is not a recognized boolean and removes the need for the separate range check on the result.
The boolean uses rte_kvargs_process_opt(), so that a bare key with no value enables the option. Signed-off-by: Stephen Hemminger <[email protected]> --- drivers/raw/skeleton/skeleton_rawdev.c | 20 ++++---------------- 1 file changed, 4 insertions(+), 16 deletions(-) diff --git a/drivers/raw/skeleton/skeleton_rawdev.c b/drivers/raw/skeleton/skeleton_rawdev.c index 6e99d35536..4e20952e47 100644 --- a/drivers/raw/skeleton/skeleton_rawdev.c +++ b/drivers/raw/skeleton/skeleton_rawdev.c @@ -658,22 +658,10 @@ skeleton_rawdev_destroy(const char *name) return 0; } -static int -skeldev_get_selftest(const char *key __rte_unused, - const char *value, - void *opaque) -{ - int *flag = opaque; - if (value == NULL || opaque == NULL) - return -EINVAL; - *flag = atoi(value); - return 0; -} - static int skeldev_parse_vdev_args(struct rte_vdev_device *vdev) { - int selftest = 0; + bool selftest = false; const char *name; const char *params; @@ -693,10 +681,10 @@ skeldev_parse_vdev_args(struct rte_vdev_device *vdev) "Ignoring unsupported params supplied '%s'", name); } else { - int ret = rte_kvargs_process(kvlist, + int ret = rte_kvargs_process_opt(kvlist, SKELETON_SELFTEST_ARG, - skeldev_get_selftest, &selftest); - if (ret != 0 || (selftest < 0 || selftest > 1)) { + rte_kvargs_handle_bool, &selftest); + if (ret != 0) { SKELETON_PMD_ERR("%s: Error in parsing args", name); rte_kvargs_free(kvlist); -- 2.53.0

