- struct ubus_request req;
- int ret;
-
- if (obj->id || !obj->name || !obj->type)
- return UBUS_STATUS_INVALID_ARGUMENT;
-
- blob_buf_init(&b, 0);
- blob_put_string(&b, UBUS_ATTR_OBJPATH, obj->name);
- if (obj->parent)
- blob_put_int32(&b, UBUS_ATTR_OBJID, obj->parent->id);
-
- if (obj->type->id)
- blob_put_int32(&b, UBUS_ATTR_OBJTYPE, obj->type->id);
- else if (!ubus_push_object_type(obj->type))
- return UBUS_STATUS_INVALID_ARGUMENT;
-
- ubus_start_request(ctx, &req, b.head, UBUS_MSG_PUBLISH, 0);
- req.data_cb = ubus_publish_cb;
- req.priv = obj;
- ret = ubus_complete_request(ctx, &req);
- if (ret)
- return ret;
-
- if (!obj->id)
- return UBUS_STATUS_NO_DATA;
-
- return 0;