nfp_devarg_handle_int() infers overflow from the result being ULONG_MAX
rather than checking errno, so the literal value 18446744073709551615 is
rejected while a genuine overflow of any other value is not detected.

Both users of it parse a boolean, so use rte_kvargs_handle_bool() and
drop the local handler along with the open coded 0/1 check. The
documented "=0" and "=1" forms still work, and the usual spellings such
as "on" and "true" are now accepted as well.

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/net/nfp/nfp_ethdev.c | 36 ++----------------------------------
 1 file changed, 2 insertions(+), 34 deletions(-)

diff --git a/drivers/net/nfp/nfp_ethdev.c b/drivers/net/nfp/nfp_ethdev.c
index d2da18013c..37005a3cea 100644
--- a/drivers/net/nfp/nfp_ethdev.c
+++ b/drivers/net/nfp/nfp_ethdev.c
@@ -48,28 +48,6 @@ struct nfp_net_init {
        struct nfp_net_hw_priv *hw_priv;
 };
 
-static int
-nfp_devarg_handle_int(const char *key,
-               const char *value,
-               void *extra_args)
-{
-       char *end_ptr;
-       uint64_t *num = extra_args;
-
-       if (value == NULL)
-               return -EPERM;
-
-       *num = strtoul(value, &end_ptr, 10);
-       if (*num == ULONG_MAX) {
-               PMD_DRV_LOG(ERR, "%s: '%s' is not a valid param.", key, value);
-               return -ERANGE;
-       } else if (value == end_ptr) {
-               return -EPERM;
-       }
-
-       return 0;
-}
-
 static int
 nfp_devarg_parse_bool_para(struct rte_kvargs *kvlist,
                const char *key_match,
@@ -77,7 +55,6 @@ nfp_devarg_parse_bool_para(struct rte_kvargs *kvlist,
 {
        int ret;
        uint32_t count;
-       uint64_t value;
 
        count = rte_kvargs_count(kvlist, key_match);
        if (count == 0)
@@ -88,20 +65,11 @@ nfp_devarg_parse_bool_para(struct rte_kvargs *kvlist,
                return -EINVAL;
        }
 
-       ret = rte_kvargs_process(kvlist, key_match, &nfp_devarg_handle_int, 
&value);
+       ret = rte_kvargs_process_opt(kvlist, key_match, rte_kvargs_handle_bool,
+                       value_ret);
        if (ret != 0)
                return -EINVAL;
 
-       if (value == 1) {
-               *value_ret = true;
-       } else if (value == 0) {
-               *value_ret = false;
-       } else {
-               PMD_DRV_LOG(ERR, "The param does not work, the format is 
%s=0/1.",
-                               key_match);
-               return -EINVAL;
-       }
-
        return 0;
 }
 
-- 
2.53.0

Reply via email to