summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--grammar/rainerscript.c26
-rw-r--r--runtime/rsconf.c2
2 files changed, 20 insertions, 8 deletions
diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
index ea23dc1a..bcc73af0 100644
--- a/grammar/rainerscript.c
+++ b/grammar/rainerscript.c
@@ -332,8 +332,9 @@ void
cnfexprEval(struct cnfexpr *expr, struct exprret *ret, void* usrptr)
{
struct exprret r, l; /* memory for subexpression results */
- es_str_t *estr;
+ es_str_t *estr_r, *estr_l;
int bMustFree;
+ int bMustFree2;
//dbgprintf("eval expr %p, type '%c'(%u)\n", expr, expr->nodetype, expr->nodetype);
switch(expr->nodetype) {
@@ -345,15 +346,15 @@ cnfexprEval(struct cnfexpr *expr, struct exprret *ret, void* usrptr)
if(r.datatype == 'S') {
ret->d.n = !es_strcmp(l.d.estr, r.d.estr);
} else {
- estr = exprret2String(&r, &bMustFree);
- ret->d.n = !es_strcmp(l.d.estr, estr);
- if(bMustFree) es_deleteStr(estr);
+ estr_r = exprret2String(&r, &bMustFree);
+ ret->d.n = !es_strcmp(l.d.estr, estr_r);
+ if(bMustFree) es_deleteStr(estr_r);
}
} else {
if(r.datatype == 'S') {
- estr = exprret2String(&l, &bMustFree);
- ret->d.n = !es_strcmp(r.d.estr, estr);
- if(bMustFree) es_deleteStr(estr);
+ estr_l = exprret2String(&l, &bMustFree);
+ ret->d.n = !es_strcmp(r.d.estr, estr_l);
+ if(bMustFree) es_deleteStr(estr_l);
} else {
ret->d.n = (l.d.n == r.d.n);
}
@@ -374,6 +375,17 @@ cnfexprEval(struct cnfexpr *expr, struct exprret *ret, void* usrptr)
case CMP_GT:
COMP_NUM_BINOP(>);
break;
+ case CMP_CONTAINS:
+ cnfexprEval(expr->l, &l, usrptr);
+ cnfexprEval(expr->r, &r, usrptr);
+ estr_r = exprret2String(&r, &bMustFree);
+ estr_l = exprret2String(&l, &bMustFree2);
+ ret->datatype = 'N';
+dbgprintf("ZZZZ: contains ret %d\n", es_strContains(estr_l, estr_r));
+ ret->d.n = es_strContains(estr_l, estr_r) != -1;
+ if(bMustFree) es_deleteStr(estr_r);
+ if(bMustFree2) es_deleteStr(estr_l);
+ break;
case OR:
cnfexprEval(expr->l, &l, usrptr);
ret->datatype = 'N';
diff --git a/runtime/rsconf.c b/runtime/rsconf.c
index 459c9a17..0d3c940a 100644
--- a/runtime/rsconf.c
+++ b/runtime/rsconf.c
@@ -350,7 +350,7 @@ es_str_t*
cnfGetVar(char *name, void *usrptr)
{
es_str_t *estr;
- dbgprintf("ZZZZ: var '%s' requested", name);
+ dbgprintf("ZZZZ: var '%s' requested\n", name);
if(name[0] == '$') {
estr = msgGetMsgVarNew((msg_t*) usrptr, (uchar*)name+1);
}