kvargs: add generic string matching callback
authorGaetan Rivet <gaetan.rivet@6wind.com>
Wed, 11 Jul 2018 21:45:02 +0000 (23:45 +0200)
committerThomas Monjalon <thomas@monjalon.net>
Sun, 15 Jul 2018 21:44:22 +0000 (23:44 +0200)
This function can be used as a callback to
rte_kvargs_process.

This should reduce code duplication.

Signed-off-by: Gaetan Rivet <gaetan.rivet@6wind.com>
lib/librte_kvargs/rte_kvargs.c
lib/librte_kvargs/rte_kvargs.h
lib/librte_kvargs/rte_kvargs_version.map

index 52262fe..a28f769 100644 (file)
@@ -193,3 +193,13 @@ rte_kvargs_parse_delim(const char *args, const char * const valid_keys[],
        free(copy);
        return kvlist;
 }
+
+__rte_experimental
+int
+rte_kvargs_strcmp(const char *key __rte_unused,
+                 const char *value, void *opaque)
+{
+       const char *str = opaque;
+
+       return -abs(strcmp(str, value));
+}
index 7f32fd1..fc04195 100644 (file)
@@ -153,6 +153,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.
+ */
+__rte_experimental
+int rte_kvargs_strcmp(const char *key, const char *value, void *opaque);
+
 #ifdef __cplusplus
 }
 #endif
index afce125..8f4b4e3 100644 (file)
@@ -13,5 +13,6 @@ EXPERIMENTAL {
        global:
 
        rte_kvargs_parse_delim;
+       rte_kvargs_strcmp;
 
 } DPDK_2.0;