From 14108cf513865d0cf5075bf8d2f4f52b17319d42 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 2 Nov 2012 15:10:11 +0300 Subject: [PATCH] sval: update function_comparison() to take an sval. This is part of the on going work on updating smatch_extra.c. This cleans up a several things in smatch_function_hooks.c. The call_implies_callbacks() function should have been declared static so I have fixed that now as well. Signed-off-by: Dan Carpenter --- smatch_extra.c | 12 ++++++------ smatch_extra.h | 2 +- smatch_function_hooks.c | 21 ++++++++++----------- 3 files changed, 17 insertions(+), 18 deletions(-) diff --git a/smatch_extra.c b/smatch_extra.c index 72015810..f28ac6de 100644 --- a/smatch_extra.c +++ b/smatch_extra.c @@ -630,19 +630,19 @@ static int match_func_comparison(struct expression *expr) { struct expression *left = strip_expr(expr->left); struct expression *right = strip_expr(expr->right); - long long val; + sval_t sval; if (left->type == EXPR_CALL) { - if (!get_implied_value(right, &val)) + if (!get_implied_value_sval(right, &sval)) return 1; - function_comparison(expr->op, left, val, 1); + function_comparison(expr->op, left, sval, 1); return 1; } if (right->type == EXPR_CALL) { - if (!get_implied_value(left, &val)) + if (!get_implied_value_sval(left, &sval)) return 1; - function_comparison(expr->op, right, val, 0); + function_comparison(expr->op, right, sval, 0); return 1; } @@ -816,7 +816,7 @@ void __extra_match_condition(struct expression *expr) expr = strip_expr(expr); switch (expr->type) { case EXPR_CALL: - function_comparison(SPECIAL_NOTEQUAL, expr, 0, 1); + function_comparison(SPECIAL_NOTEQUAL, expr, ll_to_sval(0), 1); return; case EXPR_PREOP: case EXPR_SYMBOL: diff --git a/smatch_extra.h b/smatch_extra.h index 4b9dad37..c632e8b9 100644 --- a/smatch_extra.h +++ b/smatch_extra.h @@ -122,7 +122,7 @@ struct range_list_sval *range_list_union_sval(struct range_list_sval *one, struc int estate_get_single_value(struct smatch_state *estate, long long *val); int estate_get_single_value_sval(struct smatch_state *state, sval_t *sval); -void function_comparison(int comparison, struct expression *expr, long long value, int left); +void function_comparison(int comparison, struct expression *expr, sval_t sval, int left); int true_comparison_range_lr(int comparison, struct data_range *var, struct data_range *val, int left); int false_comparison_range_lr(int comparison, struct data_range *var, struct data_range *val, int left); diff --git a/smatch_function_hooks.c b/smatch_function_hooks.c index 201e3d02..f093233e 100644 --- a/smatch_function_hooks.c +++ b/smatch_function_hooks.c @@ -255,7 +255,7 @@ free: return handled; } -int call_implies_callbacks(int comparison, struct expression *expr, long long value, int left) +static int call_implies_callbacks(int comparison, struct expression *expr, sval_t sval, int left) { struct call_back_list *call_backs; struct fcall_back *tmp; @@ -272,7 +272,7 @@ int call_implies_callbacks(int comparison, struct expression *expr, long long va call_backs = search_callback(func_hash, (char *)expr->fn->symbol->ident->name); if (!call_backs) return 0; - value_range = alloc_range_sval(ll_to_sval(value), ll_to_sval(value)); + value_range = alloc_range_sval(sval, sval); /* set true states */ __push_fake_cur_slist(); @@ -357,7 +357,7 @@ static int db_compare_callback(void *unused, int argc, char **argv, char **azCol return 0; } -void compare_db_implies_callbacks(int comparison, struct expression *expr, long long value, int left) +void compare_db_implies_callbacks(int comparison, struct expression *expr, sval_t sval, int left) { struct symbol *sym; static char sql_filter[1024]; @@ -383,7 +383,7 @@ void compare_db_implies_callbacks(int comparison, struct expression *expr, long db_info.comparison = comparison; db_info.expr = expr; - db_info.rl = range_list_to_sval(alloc_range_list(value, value)); + db_info.rl = alloc_range_list_sval(sval, sval); db_info.left = left; db_info.callbacks = db_implies_list; @@ -412,7 +412,7 @@ void compare_db_implies_callbacks(int comparison, struct expression *expr, long free_slist(&false_states); } -void compare_db_return_states_callbacks(int comparison, struct expression *expr, long long value, int left) +void compare_db_return_states_callbacks(int comparison, struct expression *expr, sval_t sval, int left) { struct symbol *sym; static char sql_filter[1024]; @@ -438,7 +438,7 @@ void compare_db_return_states_callbacks(int comparison, struct expression *expr, db_info.comparison = comparison; db_info.expr = expr; - db_info.rl = range_list_to_sval(alloc_range_list(value, value)); + db_info.rl = alloc_range_list_sval(sval, sval); db_info.left = left; db_info.callbacks = db_return_states_list; @@ -469,13 +469,12 @@ void compare_db_return_states_callbacks(int comparison, struct expression *expr, -void function_comparison(int comparison, struct expression *expr, - long long value, int left) +void function_comparison(int comparison, struct expression *expr, sval_t sval, int left) { - if (call_implies_callbacks(comparison, expr, value, left)) + if (call_implies_callbacks(comparison, expr, sval, left)) return; - compare_db_implies_callbacks(comparison, expr, value, left); - compare_db_return_states_callbacks(comparison, expr, value, left); + compare_db_implies_callbacks(comparison, expr, sval, left); + compare_db_return_states_callbacks(comparison, expr, sval, left); } static int db_assign_callback(void *unused, int argc, char **argv, char **azColName) -- 2.11.4.GIT