Fixed memory leaks
This commit is contained in:
2
Makefile
2
Makefile
@@ -10,4 +10,4 @@ check: $(TESTS) mpc.c
|
|||||||
./test
|
./test
|
||||||
|
|
||||||
clean:
|
clean:
|
||||||
rm test.exe
|
rm test
|
||||||
|
26
mpc.c
26
mpc.c
@@ -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) {
|
||||||
|
Reference in New Issue
Block a user