#define TEST_BIT(_name, _bit) \
(_name[(_bit) / 8] & (1 << ((_bit) % 8)))
-#define OPTMAP_OPTION(_maptype, _type, _field, ...) \
- { \
- .type = _maptype, \
- .name = #_field, \
- .offset = offsetof(_type, _field), \
- __VA_ARGS__ \
- }
+#define UCIMAP_OPTION(_type, _field) \
+ .name = #_field, \
+ .offset = offsetof(_type, _field)
struct uci_sectmap;
struct uci_optmap;
+struct ucimap_list;
struct uci_map {
struct uci_sectmap **sections;
UCIMAP_SUBTYPE = 0xf, /* subtype mask */
};
-union uci_datamap {
+union ucimap_data {
int i;
bool b;
const char *s;
void *section;
- struct list_head list;
+ struct ucimap_list *list;
};
struct uci_listmap {
struct list_head list;
- union uci_datamap data;
+ union ucimap_data data;
};
struct uci_sectmap {
} data;
};
+struct ucimap_list {
+ int n_items;
+ union ucimap_data item[];
+};
+
extern int ucimap_init(struct uci_map *map);
extern void ucimap_cleanup(struct uci_map *map);
extern void ucimap_set_changed(void *section, void *field);