use /lib/netifd as main path when dummy mode is disabled
[project/netifd.git] / proto-shell.c
index 5937e52..65ade12 100644 (file)
@@ -1,3 +1,5 @@
+#define _GNU_SOURCE
+
 #include <string.h>
 #include <stdlib.h>
 #include <stdio.h>
@@ -138,9 +140,11 @@ proto_shell_teardown_cb(struct uloop_process *p, int ret)
        struct proto_shell_state *state;
 
        state = container_of(p, struct proto_shell_state, teardown_task);
-       state->proto.proto_event(&state->proto, IFPEV_DOWN);
+
        if (state->l3_dev.dev)
                device_remove_user(&state->l3_dev);
+
+       state->proto.proto_event(&state->proto, IFPEV_DOWN);
 }
 
 static void
@@ -382,11 +386,11 @@ proto_shell_parse_config(struct config_param_list *config, json_object *obj)
        int str_len = 0;
        int i;
 
-       attrs = calloc(1, sizeof(*attrs));
+       config->n_params = json_object_array_length(obj);
+       attrs = calloc(1, sizeof(*attrs) * config->n_params);
        if (!attrs)
                return NULL;
 
-       config->n_params = json_object_array_length(obj);
        config->params = attrs;
        for (i = 0; i < config->n_params; i++) {
                json_object *cur, *name, *type;
@@ -408,7 +412,7 @@ proto_shell_parse_config(struct config_param_list *config, json_object *obj)
                if (attrs[i].type > BLOBMSG_TYPE_LAST)
                        goto error;
 
-               str_len += strlen(attrs[i].name + 1);
+               str_len += strlen(attrs[i].name) + 1;
        }
 
        str_buf = malloc(str_len);