discover/discover-server: Restrict clients based on uid
[petitboot] / lib / param_list / param_list.h
1 #ifndef PARAM_LIST_H
2 #define PARAM_LIST_H
3
4 #include <stddef.h>
5
6 #include <list/list.h>
7
8 /* struct param - Name/value pairs of zero terminated strings. */
9 struct param {
10         char *name;
11         char *value;
12         bool modified;
13         struct list_item list;
14 };
15
16 struct param_list {
17         struct list params;
18         const char **known_params;
19 };
20
21 #define param_list_for_each(_pl_ptr, _pos) \
22         list_for_each_entry(&(_pl_ptr)->params, _pos, list)
23
24 #define param_list_for_each_known_param(_pl_ptr, _pos) \
25         for (_pos = (_pl_ptr)->known_params; *_pos; _pos++)
26
27 const char **common_known_params(void);
28
29 void param_list_init(struct param_list *pl, const char *known_params[]);
30 bool param_list_is_known(const struct param_list *pl, const char *name);
31 bool param_list_is_known_n(const struct param_list *pl, const char *name,
32         unsigned int name_len);
33 struct param *param_list_get_param(struct param_list *pl, const char *name);
34 static inline const char *param_list_get_value(const struct param_list *pl,
35         const char *name)
36 {
37         const struct param *param =
38                 param_list_get_param((struct param_list *)pl, name);
39         return param ? param->value : NULL;
40 }
41 void param_list_set(struct param_list *pl, const char *name, const char *value,
42         bool modified_on_create);
43
44 /* param_list_set_non_empty - Won't create a new parameter that would be empty. */
45 void param_list_set_non_empty(struct param_list *pl, const char *name,
46         const char *value, bool modified_on_create);
47
48 #endif /* PARAM_LIST_H */
49