susumu.yata
null+****@clear*****
Fri Sep 18 10:05:12 JST 2015
susumu.yata 2015-09-18 10:05:12 +0900 (Fri, 18 Sep 2015) New Revision: f581c8e77fca2a3475501a6f2f9b8ea67baaca10 https://github.com/groonga/groonga/commit/f581c8e77fca2a3475501a6f2f9b8ea67baaca10 Message: grn_ts: add grn_ts_expr_parser_reserve_stack() Modified files: lib/ts.c Modified: lib/ts.c (+22 -0) =================================================================== --- lib/ts.c 2015-09-17 22:49:39 +0900 (f0e6831) +++ lib/ts.c 2015-09-18 10:05:12 +0900 (ad06ad3) @@ -4491,6 +4491,28 @@ grn_ts_expr_parser_tokenize(grn_ctx *ctx, grn_ts_expr_parser *parser, return GRN_SUCCESS; } +/* grn_ts_expr_parser_reserve_stack() extends a stack. */ +static grn_rc +grn_ts_expr_parser_reserve_stack(grn_ctx *ctx, grn_ts_expr_parser *parser) { + size_t i, n_bytes, new_size; + grn_ts_expr_token **new_stack; + if (parser->stack_depth < parser->stack_size) { + return GRN_SUCCESS; + } + new_size = parser->stack_size ? (parser->stack_size * 2) : 1; + n_bytes = sizeof(grn_ts_expr_token *) * new_size; + new_stack = GRN_REALLOC(parser->stack, n_bytes); + if (!new_stack) { + return GRN_NO_MEMORY_AVAILABLE; + } + for (i = parser->stack_size; i < new_size; i++) { + new_stack[i] = NULL; + } + parser->stack = new_stack; + parser->stack_size = new_size; + return GRN_SUCCESS; +} + /* grn_ts_expr_parser_analyze_token() analyzes a token. */ static grn_rc grn_ts_expr_parser_analyze_token(grn_ctx *ctx, grn_ts_expr_parser *parser, -------------- next part -------------- HTML����������������������������...Download