summaryrefslogtreecommitdiff
path: root/ucimap.h
diff options
context:
space:
mode:
authorFelix Fietkau <nbd@openwrt.org>2008-11-28 11:33:23 +0100
committerFelix Fietkau <nbd@openwrt.org>2008-11-28 11:33:23 +0100
commit99ae0f9196c8f8f334624c05a23e7e930be6c5eb (patch)
tree7613244c1bde775c077bf346ae833967455e6fe7 /ucimap.h
parent79fe711a01cb1d0ac3b5f5603d21508eb1ffbd75 (diff)
downloaduci-99ae0f9196c8f8f334624c05a23e7e930be6c5eb.tar.gz
add foreign key and list support for ucimap
Diffstat (limited to 'ucimap.h')
-rw-r--r--ucimap.h37
1 files changed, 23 insertions, 14 deletions
diff --git a/ucimap.h b/ucimap.h
index 0237fb1..43f54e0 100644
--- a/ucimap.h
+++ b/ucimap.h
@@ -44,31 +44,39 @@ struct uci_sectmap;
struct uci_optmap;
struct uci_map {
- struct uci_sectmap *sections;
+ struct uci_sectmap **sections;
unsigned int n_sections;
struct list_head sdata;
+ struct list_head fixup;
void *priv; /* user data */
};
enum ucimap_type {
- UCIMAP_STRING,
- UCIMAP_BOOL,
- UCIMAP_INT,
+ /* types */
+ UCIMAP_SIMPLE = 0x00,
+ UCIMAP_LIST = 0x10,
+ UCIMAP_TYPE = 0xf0, /* type mask */
+
+ /* subtypes */
+ UCIMAP_STRING = 0x0,
+ UCIMAP_BOOL = 0x1,
+ UCIMAP_INT = 0x2,
+ UCIMAP_SECTION = 0x3,
+ UCIMAP_SUBTYPE = 0xf, /* subtype mask */
};
-/* ucimap internal */
-struct uci_sectmap_data {
+union uci_datamap {
+ int i;
+ bool b;
+ const char *s;
+ void *section;
struct list_head list;
- struct uci_sectmap *sm;
- const char *section_name;
- unsigned long allocmap_len;
-
- /* list of allocations done by ucimap */
- void **allocmap;
+};
- /* map for changed fields */
- unsigned char *cmap;
+struct uci_listmap {
+ struct list_head list;
+ union uci_datamap data;
};
struct uci_sectmap {
@@ -105,6 +113,7 @@ struct uci_optmap {
struct {
int maxlen;
} s;
+ struct uci_sectmap *sm;
} data;
};