resolve BUGFIX handle all separators properly
Fixes #539
diff --git a/src/resolve.c b/src/resolve.c
index 75dfba9..84ec094 100644
--- a/src/resolve.c
+++ b/src/resolve.c
@@ -1644,7 +1644,7 @@
}
i++; /* get back by one step */
- if (!strncmp(&c[i], "not ", 4)) {
+ if (!strncmp(&c[i], "not", 3) && isspace(c[i + 3])) {
if (stack.index && stack.stack[stack.index - 1] == LYS_IFF_NOT) {
/* double not */
iff_stack_pop(&stack);
@@ -1653,7 +1653,7 @@
* as in case of AND and OR */
iff_stack_push(&stack, LYS_IFF_NOT);
}
- } else if (!strncmp(&c[i], "and ", 4)) {
+ } else if (!strncmp(&c[i], "and", 3) && isspace(c[i + 3])) {
/* as for OR - pop from the stack all operators with the same or higher
* priority and store them to the result, then push the AND to the stack */
while (stack.index && stack.stack[stack.index - 1] <= LYS_IFF_AND) {
@@ -1661,7 +1661,7 @@
iff_setop(iffeat_expr->expr, op, expr_size--);
}
iff_stack_push(&stack, LYS_IFF_AND);
- } else if (!strncmp(&c[i], "or ", 3)) {
+ } else if (!strncmp(&c[i], "or", 2) && isspace(c[i + 2])) {
while (stack.index && stack.stack[stack.index - 1] <= LYS_IFF_OR) {
op = iff_stack_pop(&stack);
iff_setop(iffeat_expr->expr, op, expr_size--);