do not reverse method sorting order
[project/ubus.git] / ubusd_obj.c
index ffd5330..3dd2d7f 100644 (file)
@@ -31,7 +31,7 @@ static bool ubus_create_obj_method(struct ubus_object_type *type, struct blob_at
        if (!m)
                return false;
 
-       list_add(&m->list, &type->methods);
+       list_add_tail(&m->list, &type->methods);
        memcpy(m->data, attr, bloblen);
        m->name = blobmsg_name(m->data);
 
@@ -115,7 +115,7 @@ struct ubus_object *ubusd_create_object(struct ubus_client *cl, struct blob_attr
        struct ubus_object_type *type = NULL;
 
        if (attr[UBUS_ATTR_OBJTYPE])
-               type = ubus_get_obj_type(blob_get_int32(attr[UBUS_ATTR_OBJTYPE]));
+               type = ubus_get_obj_type(blob_get_u32(attr[UBUS_ATTR_OBJTYPE]));
        else if (attr[UBUS_ATTR_SIGNATURE])
                type = ubus_create_obj_type(attr[UBUS_ATTR_SIGNATURE]);
 
@@ -139,6 +139,7 @@ struct ubus_object *ubusd_create_object(struct ubus_client *cl, struct blob_attr
                        obj->path.key = NULL;
                        goto free;
                }
+               ubusd_send_obj_event(obj, true);
        }
 
        obj->client = cl;
@@ -155,6 +156,7 @@ void ubusd_free_object(struct ubus_object *obj)
 {
        ubusd_event_cleanup_object(obj);
        if (obj->path.key) {
+               ubusd_send_obj_event(obj, false);
                avl_delete(&path, &obj->path);
                free(obj->path.key);
        }