Also, make sure to start the actual text at the margin.
=======================================================
+* kvargs: The experimental function ``rte_kvargs_strcmp()`` has been
+ removed. Its usages have been replaced by a new function
+ ``rte_kvargs_get_with_value()``.
+
* cryptodev: The API rte_cryptodev_pmd_is_valid_dev is modified to
rte_cryptodev_is_valid_dev as it can be used by the application as
well as PMD to check whether the device is valid or not.
const void *_kvlist)
{
const struct rte_kvargs *kvlist = _kvlist;
- int ret;
+ const char *key = auxiliary_params_keys[RTE_AUXILIARY_PARAM_NAME];
- ret = rte_kvargs_process(kvlist,
- auxiliary_params_keys[RTE_AUXILIARY_PARAM_NAME],
- rte_kvargs_strcmp, (void *)(uintptr_t)dev->name);
+ if (rte_kvargs_get_with_value(kvlist, key, dev->name) == NULL)
+ return -1;
- return ret != 0 ? -1 : 0;
+ return 0;
}
void *
vdev_dev_match(const struct rte_device *dev,
const void *_kvlist)
{
- int ret;
const struct rte_kvargs *kvlist = _kvlist;
- char *name;
+ const char *key = vdev_params_keys[RTE_VDEV_PARAM_NAME];
- /* cannot pass const dev->name to rte_kvargs_process() */
- name = strdup(dev->name);
- if (name == NULL)
- return -1;
- ret = rte_kvargs_process(kvlist,
- vdev_params_keys[RTE_VDEV_PARAM_NAME],
- rte_kvargs_strcmp, name);
- free(name);
- if (ret != 0)
+ if (rte_kvargs_get_with_value(kvlist, key, dev->name) == NULL)
return -1;
return 0;
free(kvlist);
}
-/* Lookup a value in an rte_kvargs list by its key. */
+/* Lookup a value in an rte_kvargs list by its key and value. */
const char *
-rte_kvargs_get(const struct rte_kvargs *kvlist, const char *key)
+rte_kvargs_get_with_value(const struct rte_kvargs *kvlist, const char *key,
+ const char *value)
{
unsigned int i;
- if (kvlist == NULL || key == NULL)
+ if (kvlist == NULL)
return NULL;
for (i = 0; i < kvlist->count; ++i) {
- if (strcmp(kvlist->pairs[i].key, key) == 0)
- return kvlist->pairs[i].value;
+ if (key != NULL && strcmp(kvlist->pairs[i].key, key) != 0)
+ continue;
+ if (value != NULL && strcmp(kvlist->pairs[i].value, value) != 0)
+ continue;
+ return kvlist->pairs[i].value;
}
return NULL;
}
+/* Lookup a value in an rte_kvargs list by its key. */
+const char *
+rte_kvargs_get(const struct rte_kvargs *kvlist, const char *key)
+{
+ if (kvlist == NULL || key == NULL)
+ return NULL;
+ return rte_kvargs_get_with_value(kvlist, key, NULL);
+}
+
/*
* Parse the arguments "key=value,key=value,..." string and return
* an allocated structure that contains a key/value list. Also
free(copy);
return kvlist;
}
-
-int
-rte_kvargs_strcmp(const char *key __rte_unused,
- const char *value, void *opaque)
-{
- const char *str = opaque;
-
- return -abs(strcmp(str, value));
-}
/**
* Get the value associated with a given key.
*
- * If multiple key matches, the value of the first one is returned.
+ * If multiple keys match, the value of the first one is returned.
*
* The memory returned is allocated as part of the rte_kvargs structure,
* it must never be modified.
*/
const char *rte_kvargs_get(const struct rte_kvargs *kvlist, const char *key);
+/**
+ * @warning
+ * @b EXPERIMENTAL: this API may change without prior notice
+ *
+ * Get the value associated with a given key and value.
+ *
+ * Find the first entry in the kvlist whose key and value match the
+ * ones passed as argument.
+ *
+ * The memory returned is allocated as part of the rte_kvargs structure,
+ * it must never be modified.
+ *
+ * @param kvlist
+ * A list of rte_kvargs pair of 'key=value'.
+ * @param key
+ * The matching key. If NULL, any key will match.
+ * @param value
+ * The matching value. If NULL, any value will match.
+ *
+ * @return
+ * NULL if no key matches the input,
+ * a value associated with a matching key otherwise.
+ */
+__rte_experimental
+const char *rte_kvargs_get_with_value(const struct rte_kvargs *kvlist,
+ const char *key, const char *value);
+
/**
* Call a handler function for each key/value matching the key
*
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.
- *
- * Unlike 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
EXPERIMENTAL {
global:
- rte_kvargs_strcmp;
-
+ # added in 21.11
+ rte_kvargs_get_with_value;
};