Browse Source

ucimap: add an example for optmap data structure encapsulation

Felix Fietkau 14 years ago
parent
commit
95967daea5
1 changed files with 39 additions and 21 deletions
  1. 39 21
      ucimap-example.c

+ 39 - 21
ucimap-example.c

@@ -82,50 +82,68 @@ network_add_alias(struct uci_map *map, void *section)
 	return 0;
 }
 
+struct my_optmap {
+	struct uci_optmap map;
+	int test;
+};
+
 static struct uci_sectmap network_interface;
 static struct uci_sectmap network_alias;
 
-static struct uci_optmap network_interface_options[] = {
+static struct my_optmap network_interface_options[] = {
 	{
-		UCIMAP_OPTION(struct uci_network, proto),
-		.type = UCIMAP_STRING,
-		.name = "proto",
-		.data.s.maxlen = 32,
+		.map = {
+			UCIMAP_OPTION(struct uci_network, proto),
+			.type = UCIMAP_STRING,
+			.name = "proto",
+			.data.s.maxlen = 32,
+		}
 	},
 	{
-		UCIMAP_OPTION(struct uci_network, ifname),
-		.type = UCIMAP_STRING,
-		.name = "ifname"
+		.map = {
+			UCIMAP_OPTION(struct uci_network, ifname),
+			.type = UCIMAP_STRING,
+			.name = "ifname"
+		}
 	},
 	{
-		UCIMAP_OPTION(struct uci_network, ipaddr),
-		.type = UCIMAP_STRING,
-		.name = "ipaddr",
+		.map = {
+			UCIMAP_OPTION(struct uci_network, ipaddr),
+			.type = UCIMAP_STRING,
+			.name = "ipaddr",
+		}
 	},
 	{
-		UCIMAP_OPTION(struct uci_network, enabled),
-		.type = UCIMAP_BOOL,
-		.name = "enabled",
+		.map = {
+			UCIMAP_OPTION(struct uci_network, enabled),
+			.type = UCIMAP_BOOL,
+			.name = "enabled",
+		}
 	},
 	{
-		UCIMAP_OPTION(struct uci_network, test),
-		.type = UCIMAP_INT,
-		.name = "test"
+		.map = {
+			UCIMAP_OPTION(struct uci_network, test),
+			.type = UCIMAP_INT,
+			.name = "test"
+		}
 	},
 	{
-		UCIMAP_OPTION(struct uci_network, aliases),
-		.type = UCIMAP_LIST | UCIMAP_SECTION,
-		.data.sm = &network_alias
+		.map = {
+			UCIMAP_OPTION(struct uci_network, aliases),
+			.type = UCIMAP_LIST | UCIMAP_SECTION,
+			.data.sm = &network_alias
+		}
 	}
 };
 
 static struct uci_sectmap network_interface = {
 	.type = "interface",
-	.options = network_interface_options,
 	.alloc_len = sizeof(struct uci_network),
 	.init_section = network_init_interface,
 	.add_section = network_add_interface,
+	.options = &network_interface_options[0].map,
 	.n_options = ARRAY_SIZE(network_interface_options),
+	.options_size = sizeof(struct my_optmap)
 };
 
 static struct uci_optmap network_alias_options[] = {