CNDP  22.08.0
kvargs.h
Go to the documentation of this file.
1 /* SPDX-License-Identifier: BSD-3-Clause
2  * Copyright (c) 2019-2022 Intel Corporation.
3  * Copyright (c) 2014 6WIND S.A.
4  */
5 
6 #ifndef __KVARGS_H_
7 #define __KVARGS_H_
8 
25 #ifdef __cplusplus
26 extern "C" {
27 #endif
28 
29 typedef enum {
30  KVARGS_PTR,
31  KVARGS_INT8,
32  KVARGS_UINT8,
33  KVARGS_INT16,
34  KVARGS_UINT16,
35  KVARGS_INT32,
36  KVARGS_UINT32,
37  KVARGS_INT64,
38  KVARGS_UINT64,
39  KVARGS_LAST_TYPE
40 } kvargs_type_t;
41 
45 #define KVARGS_MAX 64
46 
50 #define KVARGS_PAIRS_DELIM_1 ","
51 #define KVARGS_PAIRS_DELIM_2 ";"
52 
56 #define KVARGS_KV_DELIM "="
57 
61 typedef int (*arg_handler_t)(const char *key, const char *value, void *opaque);
62 
66 struct kvargs_pair {
67  char *key;
68  char *value;
69 };
70 
74 struct kvargs {
75  char *str;
76  unsigned count;
77  struct kvargs_pair pairs[KVARGS_MAX];
78 };
79 
98 struct kvargs *kvargs_parse(const char *args, const char *const valid_keys[]);
99 
125 struct kvargs *kvargs_parse_delim(const char *args, const char *const valid_keys[],
126  const char *valid_ends);
127 
137 void kvargs_free(struct kvargs *kvlist);
138 
160 int kvargs_process(const struct kvargs *kvlist, const char *key_match, arg_handler_t handler,
161  void *opaque_arg);
162 
180 int kvargs_process_type(const struct kvargs *kvlist, const char *key_match, kvargs_type_t typ,
181  void *opaque_arg);
182 
186 static inline int
187 kvargs_ptr(const struct kvargs *kv, const char *key, void *arg)
188 {
189  return kvargs_process_type(kv, key, KVARGS_PTR, arg);
190 }
191 
195 static inline int
196 kvargs_int8(const struct kvargs *kv, const char *key, void *arg)
197 {
198  return kvargs_process_type(kv, key, KVARGS_INT8, arg);
199 }
200 
204 static inline int
205 kvargs_uint8(const struct kvargs *kv, const char *key, void *arg)
206 {
207  return kvargs_process_type(kv, key, KVARGS_UINT8, arg);
208 }
209 
213 static inline int
214 kvargs_int16(const struct kvargs *kv, const char *key, void *arg)
215 {
216  return kvargs_process_type(kv, key, KVARGS_INT16, arg);
217 }
218 
222 static inline int
223 kvargs_uint16(const struct kvargs *kv, const char *key, void *arg)
224 {
225  return kvargs_process_type(kv, key, KVARGS_UINT16, arg);
226 }
227 
231 static inline int
232 kvargs_int32(const struct kvargs *kv, const char *key, void *arg)
233 {
234  return kvargs_process_type(kv, key, KVARGS_INT32, arg);
235 }
236 
240 static inline int
241 kvargs_uint32(const struct kvargs *kv, const char *key, void *arg)
242 {
243  return kvargs_process_type(kv, key, KVARGS_UINT32, arg);
244 }
245 
249 static inline int
250 kvargs_int64(const struct kvargs *kv, const char *key, void *arg)
251 {
252  return kvargs_process_type(kv, key, KVARGS_INT64, arg);
253 }
254 
258 static inline int
259 kvargs_uint64(const struct kvargs *kv, const char *key, void *arg)
260 {
261  return kvargs_process_type(kv, key, KVARGS_UINT64, arg);
262 }
263 
274 unsigned kvargs_count(const struct kvargs *kvlist, const char *key_match);
275 
299 int kvargs_strcmp(const char *key, const char *value, void *opaque);
300 
301 #ifdef __cplusplus
302 }
303 #endif
304 
305 #endif
static int kvargs_int16(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:214
int kvargs_strcmp(const char *key, const char *value, void *opaque)
static int kvargs_int32(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:232
struct kvargs * kvargs_parse_delim(const char *args, const char *const valid_keys[], const char *valid_ends)
static int kvargs_uint32(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:241
unsigned kvargs_count(const struct kvargs *kvlist, const char *key_match)
int kvargs_process_type(const struct kvargs *kvlist, const char *key_match, kvargs_type_t typ, void *opaque_arg)
void kvargs_free(struct kvargs *kvlist)
static int kvargs_uint8(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:205
struct kvargs * kvargs_parse(const char *args, const char *const valid_keys[])
static int kvargs_ptr(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:187
static int kvargs_uint16(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:223
int(* arg_handler_t)(const char *key, const char *value, void *opaque)
Definition: kvargs.h:61
#define KVARGS_MAX
Definition: kvargs.h:45
static int kvargs_int64(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:250
int kvargs_process(const struct kvargs *kvlist, const char *key_match, arg_handler_t handler, void *opaque_arg)
static int kvargs_int8(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:196
static int kvargs_uint64(const struct kvargs *kv, const char *key, void *arg)
Definition: kvargs.h:259
char * value
Definition: kvargs.h:68
char * key
Definition: kvargs.h:67
Definition: kvargs.h:74
unsigned count
Definition: kvargs.h:76
char * str
Definition: kvargs.h:75
struct kvargs_pair pairs[KVARGS_MAX]
Definition: kvargs.h:77