From 8fdad27014eb3beac0ee5ff74c3d932342ea35f3 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 13 Aug 2008 09:21:41 +0300 Subject: [PATCH] Add a custom merge function. Remove and unused state from check_null_deref.c Signed-off-by: Dan Carpenter --- check_derefed_params.c | 10 ++++++++++ check_null_deref.c | 10 +++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/check_derefed_params.c b/check_derefed_params.c index c09a9d95..024d3019 100644 --- a/check_derefed_params.c +++ b/check_derefed_params.c @@ -27,6 +27,15 @@ ALLOCATOR(param, "parameters"); #define MAX_PARAMS 16 struct param *params[MAX_PARAMS]; +static int merge_func(const char *name, struct symbol *sym, int s1, int s2) +{ + if (s2 == IGNORE) + return IGNORE; + if (s1 == ARGUMENT) + return s2; + return UNDEFINED; +} + static struct param *new_param(struct symbol *arg) { struct param *new; @@ -175,6 +184,7 @@ static void end_of_func_cleanup(struct symbol *sym) void register_derefed_params(int id) { my_id = id; + add_merge_hook(my_id, &merge_func); add_hook(&match_function_def, FUNC_DEF_HOOK); add_hook(&match_function_call_after, FUNCTION_CALL_AFTER_HOOK); add_hook(&match_deref, DEREF_HOOK); diff --git a/check_null_deref.c b/check_null_deref.c index c73630ba..4cefde73 100644 --- a/check_null_deref.c +++ b/check_null_deref.c @@ -13,12 +13,18 @@ static int my_id; enum states { - ARGUMENT, ISNULL, NONNULL, IGNORE, }; +static int merge_func(const char *name, struct symbol *sym, int s1, int s2) +{ + if (s2 == IGNORE) + return IGNORE; + return UNDEFINED; +} + static void match_function_call_after(struct expression *expr) { struct expression *tmp; @@ -130,6 +136,7 @@ static void match_condition(struct expression *expr) return; left = alloc_string(left); set_true_false_states(left, my_id, sym_left, NONNULL, ISNULL); + SM_DEBUG("set the blasted states\n"); return; case EXPR_ASSIGNMENT: match_condition(expr->left); @@ -218,6 +225,7 @@ static void match_dereferences(struct expression *expr) void register_null_deref(int id) { my_id = id; + add_merge_hook(my_id, &merge_func); add_hook(&match_function_call_after, FUNCTION_CALL_AFTER_HOOK); add_hook(&match_assign, ASSIGNMENT_AFTER_HOOK); add_hook(&match_condition, CONDITION_HOOK); -- 2.11.4.GIT