diff options
Diffstat (limited to 'grammar')
-rw-r--r-- | grammar/Makefile.am | 8 | ||||
-rw-r--r-- | grammar/rainerscript.c | 15 |
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); } } |