summaryrefslogtreecommitdiffstats
path: root/grammar
diff options
context:
space:
mode:
Diffstat (limited to 'grammar')
-rw-r--r--grammar/Makefile.am8
-rw-r--r--grammar/rainerscript.c15
2 files changed, 13 insertions, 10 deletions
diff --git a/grammar/Makefile.am b/grammar/Makefile.am
index 5911f443..d231bb46 100644
--- a/grammar/Makefile.am
+++ b/grammar/Makefile.am
@@ -13,7 +13,7 @@ libgrammar_la_SOURCES = \
grammar.h
libgrammar_la_CPPFLAGS = $(RSRT_CFLAGS)
-testdriver_SOURCES = testdriver.c libgrammar.la
-testdriver_CPPFLAGS = $(RSRT_CFLAGS)
-testdriver_LDADD = libgrammar.la
-testdriver_LDFLAGS = -lestr
+#testdriver_SOURCES = testdriver.c libgrammar.la
+#testdriver_CPPFLAGS = $(RSRT_CFLAGS)
+#testdriver_LDADD = libgrammar.la
+#testdriver_LDFLAGS = -lestr
diff --git a/grammar/rainerscript.c b/grammar/rainerscript.c
index ce0298fb..bcdbdf3b 100644
--- a/grammar/rainerscript.c
+++ b/grammar/rainerscript.c
@@ -623,14 +623,13 @@ cnfactlstAddSysline(struct cnfactlst* actlst, char *line)
struct cnfcfsyslinelst *cflst;
if((cflst = malloc(sizeof(struct cnfcfsyslinelst))) != NULL) {
- cflst->next = NULL;
cflst->line = line;
if(actlst->syslines == NULL) {
- actlst->syslines = cflst;
+ cflst->next = NULL;
} else {
cflst->next = actlst->syslines;
- actlst->syslines = cflst;
}
+ actlst->syslines = cflst;
}
return actlst;
}
@@ -1135,8 +1134,9 @@ cnfexprEval(struct cnfexpr *expr, struct var *ret, void* usrptr)
ret->d.n = 1ll;
else
ret->d.n = 0ll;
+ if(r.datatype == 'S') es_deleteStr(r.d.estr);
}
- FREE_BOTH_RET;
+ if(l.datatype == 'S') es_deleteStr(l.d.estr);
break;
case AND:
cnfexprEval(expr->l, &l, usrptr);
@@ -1147,10 +1147,11 @@ cnfexprEval(struct cnfexpr *expr, struct var *ret, void* usrptr)
ret->d.n = 1ll;
else
ret->d.n = 0ll;
+ if(r.datatype == 'S') es_deleteStr(r.d.estr);
} else {
ret->d.n = 0ll;
}
- FREE_BOTH_RET;
+ if(l.datatype == 'S') es_deleteStr(l.d.estr);
break;
case NOT:
cnfexprEval(expr->r, &r, usrptr);
@@ -1415,6 +1416,9 @@ cnfrulePrint(struct cnfrule *rule)
dbgprintf("------ end rule %p\n", rule);
}
+/* note: the sysline itself was already freed during processing
+ * and as such MUST NOT be freed again!
+ */
void
cnfcfsyslinelstDestruct(struct cnfcfsyslinelst *cfslst)
{
@@ -1422,7 +1426,6 @@ cnfcfsyslinelstDestruct(struct cnfcfsyslinelst *cfslst)
while(cfslst != NULL) {
toDel = cfslst;
cfslst = cfslst->next;
- free(toDel->line);
free(toDel);
}
}