From c74c55759ae172e0691bb2d3f3ec096add9f72c8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?S=C3=A9bastien=20Helleu?= Date: Thu, 18 Aug 2016 21:42:13 +0200 Subject: [PATCH] core: move the extra_vars_eval argument after extra_vars --- src/core/wee-eval.c | 94 +++++++++++++++++++++++---------------------- 1 file changed, 48 insertions(+), 46 deletions(-) diff --git a/src/core/wee-eval.c b/src/core/wee-eval.c index ab01ef2fa..b2d04b486 100644 --- a/src/core/wee-eval.c +++ b/src/core/wee-eval.c @@ -50,9 +50,8 @@ char *comparisons[EVAL_NUM_COMPARISONS] = { "=~", "!~", "==", "!=", "<=", "<", ">=", ">" }; char *eval_replace_vars (const char *expr, struct t_hashtable *pointers, - struct t_hashtable *extra_vars, + struct t_hashtable *extra_vars, int extra_vars_eval, const char *prefix, const char *suffix, - int extra_vars_eval, struct t_eval_regex *eval_regex); @@ -256,7 +255,7 @@ eval_replace_vars_cb (void *data, const char *text) const char *prefix, *suffix, *ptr_value, *ptr_arguments, *ptr_string; struct t_hdata *hdata; void *pointer; - int extra_vars_eval, i, length_hide_char, length, index, rc; + int i, length_hide_char, length, index, rc, extra_vars_eval; long number; long unsigned int ptr; time_t date; @@ -264,9 +263,9 @@ eval_replace_vars_cb (void *data, const char *text) pointers = (struct t_hashtable *)(((void **)data)[0]); extra_vars = (struct t_hashtable *)(((void **)data)[1]); - prefix = (const char *)(((void **)data)[2]); - suffix = (const char *)(((void **)data)[3]); - extra_vars_eval = *(int *)(((void **)data)[4]); + extra_vars_eval = *(int *)(((void **)data)[2]); + prefix = (const char *)(((void **)data)[3]); + suffix = (const char *)(((void **)data)[4]); eval_regex = (struct t_eval_regex *)(((void **)data)[5]); /* 1. variable in hashtable "extra_vars" */ @@ -277,12 +276,15 @@ eval_replace_vars_cb (void *data, const char *text) { if (extra_vars_eval) { - return eval_replace_vars (ptr_value, pointers, extra_vars, - prefix, suffix, extra_vars_eval, + return eval_replace_vars (ptr_value, pointers, + extra_vars, extra_vars_eval, + prefix, suffix, eval_regex); } else + { return strdup (ptr_value); + } } } @@ -292,8 +294,9 @@ eval_replace_vars_cb (void *data, const char *text) */ if (strncmp (text, "eval:", 5) == 0) { - return eval_replace_vars (text + 5, pointers, extra_vars, - prefix, suffix, extra_vars_eval, + return eval_replace_vars (text + 5, pointers, + extra_vars, extra_vars_eval, + prefix, suffix, eval_regex); } @@ -528,18 +531,17 @@ end: char * eval_replace_vars (const char *expr, struct t_hashtable *pointers, - struct t_hashtable *extra_vars, + struct t_hashtable *extra_vars, int extra_vars_eval, const char *prefix, const char *suffix, - int extra_vars_eval, struct t_eval_regex *eval_regex) { const void *ptr[6]; ptr[0] = pointers; ptr[1] = extra_vars; - ptr[2] = prefix; - ptr[3] = suffix; - ptr[4] = &extra_vars_eval; + ptr[2] = &extra_vars_eval; + ptr[3] = prefix; + ptr[4] = suffix; ptr[5] = eval_regex; return string_replace_with_callback (expr, prefix, suffix, @@ -705,9 +707,9 @@ char * eval_expression_condition (const char *expr, struct t_hashtable *pointers, struct t_hashtable *extra_vars, + int extra_vars_eval, const char *prefix, - const char *suffix, - int extra_vars_eval) + const char *suffix) { int logic, comp, length, level, rc; const char *pos, *pos_end; @@ -761,9 +763,8 @@ eval_expression_condition (const char *expr, if (!sub_expr) goto end; tmp_value = eval_expression_condition (sub_expr, pointers, - extra_vars, - prefix, suffix, - extra_vars_eval); + extra_vars, extra_vars_eval, + prefix, suffix); free (sub_expr); rc = eval_is_true (tmp_value); if (tmp_value) @@ -783,9 +784,9 @@ eval_expression_condition (const char *expr, { pos++; } - tmp_value = eval_expression_condition (pos, pointers, extra_vars, - prefix, suffix, - extra_vars_eval); + tmp_value = eval_expression_condition (pos, pointers, + extra_vars, extra_vars_eval, + prefix, suffix); rc = eval_is_true (tmp_value); if (tmp_value) free (tmp_value); @@ -824,14 +825,12 @@ eval_expression_condition (const char *expr, { /* for regex: just replace vars in both expressions */ tmp_value = eval_replace_vars (sub_expr, pointers, - extra_vars, + extra_vars, extra_vars_eval, prefix, suffix, - extra_vars_eval, NULL); tmp_value2 = eval_replace_vars (pos, pointers, - extra_vars, + extra_vars, extra_vars_eval, prefix, suffix, - extra_vars_eval, NULL); } else @@ -839,12 +838,12 @@ eval_expression_condition (const char *expr, /* other comparison: fully evaluate both expressions */ tmp_value = eval_expression_condition (sub_expr, pointers, extra_vars, - prefix, suffix, - extra_vars_eval); + extra_vars_eval, + prefix, suffix); tmp_value2 = eval_expression_condition (pos, pointers, extra_vars, - prefix, suffix, - extra_vars_eval); + extra_vars_eval, + prefix, suffix); } free (sub_expr); value = eval_compare (tmp_value, comp, tmp_value2); @@ -882,8 +881,9 @@ eval_expression_condition (const char *expr, sub_expr = string_strndup (expr2 + 1, pos - expr2 - 1); if (!sub_expr) goto end; - tmp_value = eval_expression_condition (sub_expr, pointers, extra_vars, - prefix, suffix, extra_vars_eval); + tmp_value = eval_expression_condition (sub_expr, pointers, + extra_vars, extra_vars_eval, + prefix, suffix); free (sub_expr); if (!pos[1]) { @@ -918,8 +918,8 @@ eval_expression_condition (const char *expr, * at this point, there is no more logical operator neither comparison, * so we just replace variables in string and return the result */ - value = eval_replace_vars (expr2, pointers, extra_vars, prefix, suffix, - extra_vars_eval, NULL); + value = eval_replace_vars (expr2, pointers, extra_vars, extra_vars_eval, + prefix, suffix, NULL); end: if (expr2) @@ -955,9 +955,8 @@ end: char * eval_replace_regex (const char *string, regex_t *regex, const char *replace, struct t_hashtable *pointers, - struct t_hashtable *extra_vars, - const char *prefix, const char *suffix, - int extra_vars_eval) + struct t_hashtable *extra_vars, int extra_vars_eval, + const char *prefix, const char *suffix) { char *result, *result2, *str_replace; int length, length_replace, start_offset, i, rc, end; @@ -1010,8 +1009,9 @@ eval_replace_regex (const char *string, regex_t *regex, const char *replace, eval_regex.result = result; - str_replace = eval_replace_vars (replace, pointers, extra_vars, - prefix, suffix, extra_vars_eval, + str_replace = eval_replace_vars (replace, pointers, + extra_vars, extra_vars_eval, + prefix, suffix, &eval_regex); length_replace = (str_replace) ? strlen (str_replace) : 0; @@ -1200,8 +1200,9 @@ eval_expression (const char *expr, struct t_hashtable *pointers, if (condition) { /* evaluate as condition (return a boolean: "0" or "1") */ - value = eval_expression_condition (expr, pointers, extra_vars, - prefix, suffix, extra_vars_eval); + value = eval_expression_condition (expr, pointers, + extra_vars, extra_vars_eval, + prefix, suffix); rc = eval_is_true (value); if (value) free (value); @@ -1213,14 +1214,15 @@ eval_expression (const char *expr, struct t_hashtable *pointers, { /* replace with regex */ value = eval_replace_regex (expr, regex, regex_replace, - pointers, extra_vars, - prefix, suffix, extra_vars_eval); + pointers, extra_vars, extra_vars_eval, + prefix, suffix); } else { /* only replace variables in expression */ - value = eval_replace_vars (expr, pointers, extra_vars, - prefix, suffix, extra_vars_eval, NULL); + value = eval_replace_vars (expr, pointers, + extra_vars, extra_vars_eval, + prefix, suffix, NULL); } }