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

Reply via email to