ucimap: simplify the parse/format callbacks. the data argument now always points...
authorFelix Fietkau <nbd@openwrt.org>
Sun, 6 Sep 2009 19:40:10 +0000 (21:40 +0200)
committerFelix Fietkau <nbd@openwrt.org>
Sun, 6 Sep 2009 19:40:10 +0000 (21:40 +0200)
ucimap-example.c
ucimap.c

index 9b315d0a193bcccf51be4f94fe6240bd63b46961..e04c66ddcc6b647ffc704d3e47590634854424f0 100644 (file)
@@ -56,7 +56,7 @@ network_parse_ip(void *section, struct uci_optmap *om, union ucimap_data *data,
        if (!target)
                return -1;
 
-       *data->data = target;
+       data->ptr = target;
        for (i = 0; i < 4; i++)
                target[i] = (char) tmp[i];
 
@@ -67,7 +67,7 @@ static int
 network_format_ip(void *section, struct uci_optmap *om, union ucimap_data *data, char **str)
 {
        static char buf[16];
-       unsigned char *ip = (unsigned char *) data->data[0];
+       unsigned char *ip = (unsigned char *) data->ptr;
 
        if (ip) {
                sprintf(buf, "%d.%d.%d.%d", ip[0], ip[1], ip[2], ip[3]);
index 99b8829e194dab82a470a7f4f1badf49a5901394..52c920b39323a88f0906b8f14fd59c2015cadd98 100644 (file)
--- a/ucimap.c
+++ b/ucimap.c
@@ -404,11 +404,10 @@ ucimap_add_value(union ucimap_data *data, struct uci_optmap *om, struct ucimap_s
                ucimap_add_fixup(sd, data, om, str);
                return;
        case UCIMAP_CUSTOM:
-               tdata.s = (char *) data;
                break;
        }
        if (om->parse) {
-               if (om->parse(ucimap_section_ptr(sd), om, &tdata, str) < 0)
+               if (om->parse(ucimap_section_ptr(sd), om, data, str) < 0)
                        return;
                if (ucimap_is_custom(om->type) && om->free) {
                        if (tdata.ptr != data->ptr)
@@ -795,13 +794,6 @@ ucimap_data_to_string(struct ucimap_section_data *sd, struct uci_optmap *om, uni
        }
 
        if (om->format) {
-               union ucimap_data tdata;
-
-               if (ucimap_is_custom(om->type)) {
-                       tdata.s = (char *)data;
-                       data = &tdata;
-               }
-
                if (om->format(ucimap_section_ptr(sd), om, data, &str) < 0)
                        return NULL;