null+****@clear*****
null+****@clear*****
2010年 6月 15日 (火) 23:32:12 JST
Daijiro MORI 2010-06-15 14:32:12 +0000 (Tue, 15 Jun 2010) New Revision: ba116fb89c3d7f7521f9a0869bac18f4eade84ea Log: Stopped accessing e->vars from scan_info_build(). Modified files: lib/expr.c Modified: lib/expr.c (+4 -3) =================================================================== --- lib/expr.c 2010-06-15 11:54:04 +0000 (09bb924) +++ lib/expr.c 2010-06-15 14:32:12 +0000 (2ee0f9a) @@ -687,11 +687,11 @@ grn_expr_get_or_add_var(grn_ctx *ctx, grn_obj *expr, const char *name, unsigned grn_hash *vars = grn_expr_get_vars(ctx, expr, &n); if (vars) { int added = 0; - char name_buf[256]; + char name_buf[16]; if (!name_size) { char *rest; name_buf[0] = '$'; - grn_itoa((int)GRN_HASH_SIZE(vars) + 1, name_buf + 1, name_buf + 256, &rest); + grn_itoa((int)GRN_HASH_SIZE(vars) + 1, name_buf + 1, name_buf + 16, &rest); name_size = rest - name_buf; name = name_buf; } @@ -3403,7 +3403,8 @@ scan_info_build(grn_ctx *ctx, grn_obj *expr, int *n, int i, m = 0, o = 0; scan_info **sis, *si = NULL; grn_expr_code *c, *ce; - grn_expr *e = (grn_expr *)expr; if (!e->nvars || !(var = &e->vars[0].value)) { return NULL; } + grn_expr *e = (grn_expr *)expr; + if (!(var = grn_expr_get_var_by_offset(ctx, expr, 0))) { return NULL; } for (stat = SCAN_START, c = e->codes, ce = &e->codes[e->codes_curr]; c < ce; c++) { switch (c->op) { case GRN_OP_MATCH :