From 815f1dcda70f161b09813fc4fddc24c522ea71bf Mon Sep 17 00:00:00 2001 From: Kaz Kylheku Date: Tue, 15 Sep 2015 00:41:17 -0700 Subject: Use alloca for some temporary arrays in regex module. * regex.c (nfa_free): Use alloca for array of all states. (nfa_run): Use alloca for move, closure and stack arrays. --- regex.c | 16 +++++----------- 1 file changed, 5 insertions(+), 11 deletions(-) (limited to 'regex.c') diff --git a/regex.c b/regex.c index 24d66a42..65f14843 100644 --- a/regex.c +++ b/regex.c @@ -36,6 +36,7 @@ #include #include #include "config.h" +#include ALLOCA_H #include "lib.h" #include "parser.h" #include "signal.h" @@ -1096,7 +1097,7 @@ static void nfa_collect_one(nfa_state_t *s, mem_t *ctx) static void nfa_free(nfa_t nfa, int nstates) { - nfa_state_t **all = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *all)); + nfa_state_t **all = coerce(nfa_state_t **, alloca(nstates * sizeof *all)); nfa_state_t **pelem = all, *s = nfa.start; unsigned visited = s->a.visited + 1; int i; @@ -1107,8 +1108,6 @@ static void nfa_free(nfa_t nfa, int nstates) for (i = 0; i < nstates; i++) nfa_state_free(all[i]); - - free(all); } /* @@ -1242,9 +1241,9 @@ static cnum nfa_run(nfa_t nfa, int nstates, const wchar_t *str) { const wchar_t *last_accept_pos = 0, *ptr = str; unsigned visited = nfa.start->a.visited + 1; - nfa_state_t **move = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *move)); - nfa_state_t **clos = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *clos)); - nfa_state_t **stack = coerce(nfa_state_t **, chk_malloc(nstates * sizeof *stack)); + nfa_state_t **move = coerce(nfa_state_t **, alloca(nstates * sizeof *move)); + nfa_state_t **clos = coerce(nfa_state_t **, alloca(nstates * sizeof *clos)); + nfa_state_t **stack = coerce(nfa_state_t **, alloca(nstates * sizeof *stack)); int nmove = 1, nclos; int accept = 0; @@ -1273,11 +1272,6 @@ static cnum nfa_run(nfa_t nfa, int nstates, const wchar_t *str) } nfa.start->a.visited = visited; - - free(stack); - free(clos); - free(move); - return last_accept_pos ? last_accept_pos - str : -1; } -- cgit v1.2.3