[dpdk-dev] [PATCH v6 12/22] kvargs: add generic string matching callback
Gaëtan Rivet
gaetan.rivet at 6wind.com
Fri Apr 13 17:06:42 CEST 2018
On Fri, Apr 13, 2018 at 08:19:16PM +0530, Shreyansh Jain wrote:
> On Friday 13 April 2018 06:52 PM, Gaetan Rivet wrote:
> > This function can be used as a callback to
> > rte_kvargs_process.
> >
> > This should reduce code duplication.
> >
> > Signed-off-by: Gaetan Rivet <gaetan.rivet at 6wind.com>
> > ---
> > lib/Makefile | 1 +
> > lib/librte_kvargs/rte_kvargs.c | 10 ++++++++++
> > lib/librte_kvargs/rte_kvargs.h | 28 ++++++++++++++++++++++++++++
> > lib/librte_kvargs/rte_kvargs_version.map | 7 +++++++
> > 4 files changed, 46 insertions(+)
> >
> > diff --git a/lib/Makefile b/lib/Makefile
> > index 1b17526f7..4206485d3 100644
> > --- a/lib/Makefile
> > +++ b/lib/Makefile
> > @@ -5,6 +5,7 @@ include $(RTE_SDK)/mk/rte.vars.mk
> > DIRS-y += librte_compat
> > DIRS-$(CONFIG_RTE_LIBRTE_KVARGS) += librte_kvargs
> > +DEPDIRS-librte_kvargs := librte_compat
> > DIRS-$(CONFIG_RTE_LIBRTE_EAL) += librte_eal
> > DEPDIRS-librte_eal := librte_kvargs
> > DIRS-$(CONFIG_RTE_LIBRTE_PCI) += librte_pci
> > diff --git a/lib/librte_kvargs/rte_kvargs.c b/lib/librte_kvargs/rte_kvargs.c
> > index 0a1abf579..6ee04cbb9 100644
> > --- a/lib/librte_kvargs/rte_kvargs.c
> > +++ b/lib/librte_kvargs/rte_kvargs.c
> > @@ -180,3 +180,13 @@ rte_kvargs_parse(const char *args, const char * const valid_keys[])
> > return kvlist;
> > }
> > +
> > +__rte_experimental
> > +int
> > +rte_kvargs_strcmp(const char *key __rte_unused,
> > + const char *value, void *opaque)
> > +{
> > + const char *str = opaque;
> > +
> > + return -strcmp(str, value);
> > +}
> > diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/librte_kvargs/rte_kvargs.h
> > index 51b8120b8..c07c6fea5 100644
> > --- a/lib/librte_kvargs/rte_kvargs.h
> > +++ b/lib/librte_kvargs/rte_kvargs.h
> > @@ -25,6 +25,8 @@
> > extern "C" {
> > #endif
> > +#include <rte_compat.h>
> > +
> > /** Maximum number of key/value associations */
> > #define RTE_KVARGS_MAX 32
> > @@ -121,6 +123,32 @@ int rte_kvargs_process(const struct rte_kvargs *kvlist,
> > unsigned rte_kvargs_count(const struct rte_kvargs *kvlist,
> > const char *key_match);
> > +/**
> > + * Generic kvarg handler for string comparison.
> > + *
> > + * This function can be used for a generic string comparison processing
> > + * on a list of kvargs.
> > + *
> > + * @param key
> > + * kvarg pair key.
> > + *
> > + * @param value
> > + * kvarg pair value.
> > + *
> > + * @param opaque
> > + * Opaque pointer to a string.
> > + *
> > + * @return
> > + * 0 if the strings match.
> > + * !0 otherwise or on error.
> > + *
> > + * Unless strcmp, comparison ordering is not kept.
> > + * In order for rte_kvargs_process to stop processing on match error,
> > + * a negative value is returned even if strcmp had returned a positive one.
>
> Is the above comment valid?
>
> > + return -strcmp(str, value);
>
> In case a negative is returned (when key opaque < value), this function
> would return a positive. So, effectively you have only reversed the values.
> Is that the expectation?
>
> In 21/22:
>
> --->8--- rte_kvargs_process ---
> for (i = 0; i < kvlist->count; i++) {
> pair = &kvlist->pairs[i];
> if (key_match == NULL || strcmp(pair->key, key_match) == 0) {
> if ((*handler)(pair->key, pair->value, opaque_arg) < 0)
> return -1;
> }
> }
> --->8---
>
> This would only cause the opaque < value case to continue ahead but not the
> reverse.
>
Ah! yes, you're right of course.
This is not the expectation, I will fix this.
Thanks,
--
Gaëtan Rivet
6WIND
More information about the dev
mailing list