X-Git-Url: https://gerrit.automotivelinux.org/gerrit/gitweb?a=blobdiff_plain;ds=sidebyside;f=src%2Fafb-perm.c;h=ca83c7a394e989effb63d59e450ea5b5c0631056;hb=ca2051a26b74e1140cf2ca3ea0c82c1eed5bce28;hp=b4d2b5e31c1d5ee7274948bc49d3431a6a7d31a1;hpb=e62227977bbc161d2d0ae49951f9a4fbf02a354e;p=src%2Fapp-framework-binder.git diff --git a/src/afb-perm.c b/src/afb-perm.c index b4d2b5e3..ca83c7a3 100644 --- a/src/afb-perm.c +++ b/src/afb-perm.c @@ -136,27 +136,23 @@ static void node_free(struct node *node) */ static int node_check(struct node *node, int (*check)(void *closure, const char *name), void *closure) { - int rc; - - switch (node->type) { - case Text: - rc = check(closure, node->text); - break; - case And: - rc = node_check(node->children[0], check, closure); - if (rc) - rc = node_check(node->children[1], check, closure); - break; - case Or: - rc = node_check(node->children[0], check, closure); - if (!rc) - rc = node_check(node->children[1], check, closure); - break; - case Not: - rc = !node_check(node->children[0], check, closure); - break; + for(;;) { + switch (node->type) { + case Text: + return check(closure, node->text); + case And: + if (!node_check(node->children[0], check, closure)) + return 0; + break; + case Or: + if (node_check(node->children[0], check, closure)) + return 1; + break; + case Not: + return !node_check(node->children[0], check, closure); + } + node = node->children[1]; } - return rc; } /*********************************************************************