static int
network_parse_ip(void *section, struct uci_optmap *om, union ucimap_data *data, const char *str)
{
- struct uci_network *net = section;
unsigned char *target = (unsigned char *) data->s;
- unsigned int tmp[4];
+ int tmp[4];
int i;
if (sscanf(str, "%d.%d.%d.%d", &tmp[0], &tmp[1], &tmp[2], &tmp[3]) != 4)
return 0;
}
+static int
+network_format_ip(void *sction, struct uci_optmap *om, union ucimap_data *data, char **str)
+{
+ static char buf[16];
+ unsigned char *ip = (unsigned char *) data->s;
+
+ sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
+ *str = buf;
+
+ return 0;
+}
+
static int
network_init_interface(struct uci_map *map, void *section, struct uci_section *s)
{
return 0;
}
+static struct ucimap_section_data *
+network_allocate(struct uci_map *map, struct uci_sectionmap *sm, struct uci_section *s)
+{
+ struct uci_network *p = malloc(sizeof(struct uci_network));
+ memset(p, 0, sizeof(struct uci_network));
+ return &p->map;
+}
+
struct my_optmap {
struct uci_optmap map;
int test;
.type = UCIMAP_CUSTOM,
.name = "ipaddr",
.parse = network_parse_ip,
+ .format = network_format_ip,
}
},
{
static struct uci_sectionmap network_interface = {
UCIMAP_SECTION(struct uci_network, map),
.type = "interface",
- .alloc_len = sizeof(struct uci_network),
+ .alloc = network_allocate,
.init = network_init_interface,
.add = network_add_interface,
.options = &network_interface_options[0].map,
{
struct uci_context *ctx;
struct uci_package *pkg;
- struct list_head *p, *p2;
+ struct list_head *p;
struct uci_network *net;
struct uci_alias *alias;
int i;
ctx = uci_alloc_context();
ucimap_init(&network_map);
+ uci_set_confdir(ctx, "./test/config");
uci_load(ctx, "network", &pkg);
ucimap_parse(&network_map, pkg);
printf("New alias: %s\n", alias->name);
}
#if 0
- net->ipaddr = "2.3.4.5";
- ucimap_set_changed(net, &net->ipaddr);
- ucimap_store_section(&network_map, pkg, net);
+ memcpy(net->ipaddr, "\x01\x03\x04\x05", 4);
+ ucimap_set_changed(&net->map, &net->ipaddr);
+ ucimap_store_section(&network_map, pkg, &net->map);
uci_save(ctx, pkg);
#endif
}
-done:
ucimap_cleanup(&network_map);
uci_free_context(ctx);