From: Felix Fietkau Date: Wed, 9 Dec 2015 18:39:24 +0000 (+0100) Subject: ubusd: simplify/fix avl loop in ubusd_reply_add() X-Git-Url: https://git.librecmc.org/?a=commitdiff_plain;h=766d49876f8f877f4846c16864e7f73b5a3917f7;p=oweals%2Fubus.git ubusd: simplify/fix avl loop in ubusd_reply_add() Signed-off-by: Felix Fietkau --- diff --git a/ubusd_acl.c b/ubusd_acl.c index 9f0f0fc..9c27750 100644 --- a/ubusd_acl.c +++ b/ubusd_acl.c @@ -413,26 +413,28 @@ ubusd_reply_add(struct ubus_object *obj) if (!obj->path.key) return; + acl = avl_find_ge_element(&ubusd_acls, obj->path.key, acl, avl); - while (acl && !avl_is_last(&ubusd_acls, &acl->avl) && - !ubusd_acl_match_path(obj->path.key, acl->avl.key, NULL)) { + avl_for_element_to_last(&ubusd_acls, acl, acl, avl) { + void *c; + + if (!acl->priv) + continue; - if (acl->priv) { - void *c = blobmsg_open_table(&b, NULL); + if (!ubusd_acl_match_path(obj->path.key, acl->avl.key, NULL)) + continue; - blobmsg_add_string(&b, "obj", obj->path.key); - if (acl->user) - blobmsg_add_string(&b, "user", acl->user); - if (acl->group) - blobmsg_add_string(&b, "group", acl->group); + c = blobmsg_open_table(&b, NULL); + blobmsg_add_string(&b, "obj", obj->path.key); + if (acl->user) + blobmsg_add_string(&b, "user", acl->user); + if (acl->group) + blobmsg_add_string(&b, "group", acl->group); - if (acl->priv) - blobmsg_add_field(&b, blobmsg_type(acl->priv), "acl", - blobmsg_data(acl->priv), blobmsg_data_len(acl->priv)); + blobmsg_add_field(&b, blobmsg_type(acl->priv), "acl", + blobmsg_data(acl->priv), blobmsg_data_len(acl->priv)); - blobmsg_close_table(&b, c); - } - acl = avl_next_element(acl, avl); + blobmsg_close_table(&b, c); } } static int ubusd_reply_query(struct ubus_client *cl, struct ubus_msg_buf *ub, struct blob_attr **attr, struct blob_attr *msg)