diff options
author | Clyne Sullivan <tullivan99@gmail.com> | 2018-03-05 10:50:21 -0500 |
---|---|---|
committer | Clyne Sullivan <tullivan99@gmail.com> | 2018-03-05 10:50:21 -0500 |
commit | 0fb67b8d66ffd47ede0a0a5d09380943722414e9 (patch) | |
tree | 9257f539021bcb1bb8b585969b080c3930f8e9bf | |
parent | 7b08dbbbe9a3dbe326a751497d27b9e187142eb8 (diff) |
leak fix for scripted returns
-rw-r--r-- | Makefile | 2 | ||||
-rw-r--r-- | builtins.c | 13 | ||||
-rw-r--r-- | parser.c | 6 |
3 files changed, 11 insertions, 10 deletions
@@ -16,4 +16,4 @@ all: $(CC) $(CFLAGS) -c variable.c $(AR) r libinterp.a *.o @rm -f *.o - #$(CC) $(CFLAGS) shell.c *.o -o shell #-L. -l interp + #$(CC) $(CFLAGS) shell.c *.o -o shell @@ -94,15 +94,13 @@ int ifunc_do(interpreter *it) int ifunc_while(interpreter *it) { - //int c = igetarg_integer(it, 0); + int c = igetarg_integer(it, 0); ipop(it); int nidx = (int)ipop(it); - //if (c != 0) { + if (c != 0) { //ipush(it, (void *)nidx); it->lnidx = nidx - 1; - //} else { - // c++; - //} + } ipush(it, 0); return 0; } @@ -126,7 +124,10 @@ void iret(interpreter *it, variable *v) if (it->ret != 0) { it->ret->valtype = v->valtype; it->ret->value = v->value; - it->ret->svalue = v->svalue; + char *s = it->ret->svalue; + if (s != 0 && s != str_undef) + free(s); + it->ret->svalue = strclone(v->svalue); it->ret = 0; } } @@ -39,9 +39,9 @@ void iend(interpreter *it) { for (unsigned int i = 0; i < MAX_VARS; i++) { if (it->vars[i].used == 1) { - char *s = it->vars[i].svalue; - if (s != 0 && s != str_undef && s != str_func) - free(s); + //char *s = it->vars[i].svalue; + //if (s != 0 && s != str_undef && s != str_func) + // free(s); free(it->vnames[i]); } } |