X-Git-Url: http://git.droids-corp.org/?a=blobdiff_plain;f=lib%2Flibrte_kvargs%2Frte_kvargs.h;h=51b8120b8ba4d53a7d925908aab37dae754a74d9;hb=b2400a53e67564bd0d64c58de3bdc8277bfaaba3;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..51b8120b8b 100644 --- a/lib/librte_kvargs/rte_kvargs.h +++ b/lib/librte_kvargs/rte_kvargs.h @@ -1,35 +1,6 @@ -/*- - * BSD LICENSE - * - * Copyright(c) 2010-2013 Intel Corporation. All rights reserved. - * Copyright(c) 2014 6WIND S.A. - * All rights reserved. - * - * Redistribution and use in source and binary forms, with or without - * modification, are permitted provided that the following conditions - * are met: - * - * * Redistributions of source code must retain the above copyright - * notice, this list of conditions and the following disclaimer. - * * Redistributions in binary form must reproduce the above copyright - * notice, this list of conditions and the following disclaimer in - * the documentation and/or other materials provided with the - * distribution. - * * Neither the name of Intel Corporation nor the names of its - * contributors may be used to endorse or promote products derived - * from this software without specific prior written permission. - * - * THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS - * "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT - * LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR - * A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT - * OWNER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, - * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT - * LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, - * DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY - * THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT - * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE - * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. +/* SPDX-License-Identifier: BSD-3-Clause + * Copyright(c) 2010-2013 Intel Corporation. + * Copyright(c) 2014 6WIND S.A. */ #ifndef _RTE_KVARGS_H_ @@ -40,7 +11,11 @@ * RTE Argument parsing * * This module can be used to parse arguments whose format is - * key1=value1;key2=value2;key3=value3;... + * 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 +29,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,62 +45,56 @@ 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 *const 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 * * For each key/value association that matches the given key, calls the * handler function with the for a given arg_name passing the value on the - * dictionary for that key and a given extra argument. + * dictionary for that key and a given extra argument. If *kvlist* is NULL + * function does nothing. * * @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 +113,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