X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_kvargs%2Frte_kvargs.h;h=71c9630d9d78889d2abd129c70b2baf95cb4e850;hb=9ac92a2693b0396a51e02aa13dba20b356d49359;hp=bf32ce21a8b4b6c0beca4a3c013561ee3e796875;hpb=e1a00536c8ed65bee4e86976a0805fdc65faa741;p=dpdk.git diff --git a/lib/librte_kvargs/rte_kvargs.h b/lib/librte_kvargs/rte_kvargs.h index bf32ce21a8..71c9630d9d 100644 --- a/lib/librte_kvargs/rte_kvargs.h +++ b/lib/librte_kvargs/rte_kvargs.h @@ -42,6 +42,10 @@ * This module can be used to parse arguments whose format is * key1=value1;key2=value2;key3=value3;... * + * The same key can appear several times with the same or a different + * value. Indeed, the arguments are stored as a list of key/values + * associations and not as a dictionary. + * * This file provides some helpers that are especially used by virtual * ethernet devices at initialization for arguments parsing. */ @@ -54,13 +58,13 @@ extern "C" { #define RTE_KVARGS_MAX 32 /** separator character used between each pair */ -#define RTE_KVARGS_PAIRS_DELIM ';' +#define RTE_KVARGS_PAIRS_DELIM ";" /** separator character used between key and value */ -#define RTE_KVARGS_KV_DELIM '=' +#define RTE_KVARGS_KV_DELIM "=" /** Type of callback function used by rte_kvargs_process() */ -typedef int (*arg_handler_t)(char *value, void *opaque); +typedef int (*arg_handler_t)(const char *key, const char *value, void *opaque); /** A key/value association */ struct rte_kvargs_pair { @@ -70,50 +74,41 @@ struct rte_kvargs_pair { /** Store a list of key/value associations */ struct rte_kvargs { + char *str; /**< copy of the argument string */ unsigned count; /**< number of entries in the list */ - size_t size; /**< maximum number of entries */ struct rte_kvargs_pair pairs[RTE_KVARGS_MAX]; /**< list of key/values */ }; /** - * Initialize an empty rte_kvargs structure + * Allocate a rte_kvargs and store key/value associations from a string * - * Set the content of the rte_kvargs structure given as a parameter - * to an empty list of key/value. + * The function allocates and fills a rte_kvargs structure from a given + * string whose format is key1=value1;key2=value2;... * - * @param kvlist - * The rte_kvargs structure + * The structure can be freed with rte_kvargs_free(). + * + * @param args + * The input string containing the key/value associations + * @param valid_keys + * A list of valid keys (table of const char *, the last must be NULL). + * This argument is ignored if NULL * * @return - * - 0 on success - * - Negative on error + * - A pointer to an allocated rte_kvargs structure on success + * - NULL on error */ -int rte_kvargs_init(struct rte_kvargs *kvlist); +struct rte_kvargs *rte_kvargs_parse(const char *args, const char *valid_keys[]); /** - * Append key/value associations in a rte_kvargs structure from a string + * Free a rte_kvargs structure * - * The function fills a rte_kvargs structure from a string whose format - * is key1=value1;key2=value2;... - * The key/value associations are appended to those which are already - * present in the rte_kvargs structure. + * Free a rte_kvargs structure previously allocated with + * rte_kvargs_parse(). * * @param kvlist * The rte_kvargs structure - * @param name - * The name of the driver - * @param args - * The input string containing the key/value associations - * @param valid_keys - * A list of valid keys (table of const char *, the last must be NULL). - * This argument is ignored if NULL - * - * @return - * - 0 on success - * - Negative on error */ -int rte_kvargs_parse(struct rte_kvargs *kvlist, const char *name, - const char *args, const char *valid_keys[]); +void rte_kvargs_free(struct rte_kvargs *kvlist); /** * Call a handler function for each key/value matching the key @@ -125,7 +120,8 @@ int rte_kvargs_parse(struct rte_kvargs *kvlist, const char *name, * @param kvlist * The rte_kvargs structure * @param key_match - * The key on which the handler should be called + * The key on which the handler should be called, or NULL to process handler + * on all associations * @param handler * The function to call for each matching key * @param opaque_arg @@ -144,7 +140,7 @@ int rte_kvargs_process(const struct rte_kvargs *kvlist, * @param kvlist * The rte_kvargs structure * @param key_match - * The key that should match + * The key that should match, or NULL to count all associations * @return * The number of entries