kvargs: rework API to fix memory leak
[dpdk.git] / lib / librte_kvargs / rte_kvargs.h
index 3540e03..25e086f 100644 (file)
@@ -70,47 +70,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 */
        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 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 *args, const char *valid_keys[]);
+void rte_kvargs_free(struct rte_kvargs *kvlist);
 
 /**
  * Call a handler function for each key/value matching the key