Fixed memory leaks

This commit is contained in:
Daniel Holden
2014-01-21 10:23:58 -05:00
parent 51dbf66b50
commit 8931782986
2 changed files with 17 additions and 11 deletions

View File

@@ -10,4 +10,4 @@ check: $(TESTS) mpc.c
./test ./test
clean: clean:
rm test.exe rm test

26
mpc.c
View File

@@ -684,13 +684,21 @@ static mpc_stack_t *mpc_stack_new(const char *filename) {
return s; return s;
} }
static void mpc_stack_err(mpc_stack_t *s, mpc_err_t* e) {
mpc_err_t *errs[2];
errs[0] = s->err;
errs[1] = e;
s->err = mpc_err_or(errs, 2);
}
static int mpc_stack_terminate(mpc_stack_t *s, mpc_result_t *r) { static int mpc_stack_terminate(mpc_stack_t *s, mpc_result_t *r) {
int success = s->returns[0]; int success = s->returns[0];
if (success) { if (success) {
*r = s->results[0]; r->output = s->results[0].output;
mpc_err_delete(s->err); mpc_err_delete(s->err);
} else { } else {
mpc_stack_err(s, s->results[0].error);
r->error = s->err; r->error = s->err;
} }
@@ -703,13 +711,6 @@ static int mpc_stack_terminate(mpc_stack_t *s, mpc_result_t *r) {
return success; return success;
} }
static void mpc_stack_err(mpc_stack_t *s, mpc_err_t* e) {
mpc_err_t *errs[2];
errs[0] = s->err;
errs[1] = e;
s->err = mpc_err_or(errs, 2);
}
/* Stack Parser Stuff */ /* Stack Parser Stuff */
static void mpc_stack_set_state(mpc_stack_t *s, int x) { static void mpc_stack_set_state(mpc_stack_t *s, int x) {
@@ -1823,7 +1824,8 @@ static char *mpc_re_range_escape_char(char c) {
} }
static mpc_val_t *mpcf_re_range(mpc_val_t *x) { static mpc_val_t *mpcf_re_range(mpc_val_t *x) {
mpc_parser_t *out;
char *range = calloc(1,1); char *range = calloc(1,1);
char *tmp = NULL; char *tmp = NULL;
char *s = x; char *s = x;
@@ -1878,8 +1880,12 @@ static mpc_val_t *mpcf_re_range(mpc_val_t *x) {
} }
out = comp ? mpc_noneof(range) : mpc_oneof(range);
free(x); free(x);
return comp ? mpc_noneof(range) : mpc_oneof(range); free(range);
return out;
} }
mpc_parser_t *mpc_re(const char *re) { mpc_parser_t *mpc_re(const char *re) {