X-Git-Url: http://git.archive.openwrt.org/?p=project%2Fuci.git;a=blobdiff_plain;f=ucimap-example.c;h=157c32f583020ff361ec25200f10c1ce222fa098;hp=9fc71e2e104e0e1d6c1fc8023356aad5640ce7ce;hb=54042793af9356dddf76a6d107aa8d1f65400788;hpb=6d75ac9588e1aa3a85dd85d121978e9d99531ac4 diff --git a/ucimap-example.c b/ucimap-example.c index 9fc71e2..157c32f 100644 --- a/ucimap-example.c +++ b/ucimap-example.c @@ -44,9 +44,8 @@ struct uci_alias { 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) @@ -59,6 +58,18 @@ network_parse_ip(void *section, struct uci_optmap *om, union ucimap_data *data, } 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) { struct uci_network *net = section; @@ -139,6 +150,7 @@ static struct my_optmap network_interface_options[] = { .type = UCIMAP_CUSTOM, .name = "ipaddr", .parse = network_parse_ip, + .format = network_format_ip, } }, { @@ -207,7 +219,7 @@ int main(int argc, char **argv) { 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; @@ -216,6 +228,7 @@ int main(int argc, char **argv) ctx = uci_alloc_context(); ucimap_init(&network_map); + uci_set_confdir(ctx, "./test/config"); uci_load(ctx, "network", &pkg); ucimap_parse(&network_map, pkg); @@ -241,15 +254,14 @@ int main(int argc, char **argv) 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);