From a072dbb0ec1ffe7bcc149bcf0addf9b3badb1875 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Wed, 20 Jan 2010 12:18:32 +0300 Subject: [PATCH] Move the checks out of smatch.c into check_list.h This way you only have to add the checks in one place instead of two. Signed-off-by: Dan Carpenter --- Makefile | 2 +- check_list.h | 50 +++++++++++++++++++++++++++++++++ smatch.c | 90 +++--------------------------------------------------------- 3 files changed, 55 insertions(+), 87 deletions(-) create mode 100644 check_list.h diff --git a/Makefile b/Makefile index e9b59f59..468312fd 100644 --- a/Makefile +++ b/Makefile @@ -167,7 +167,7 @@ smatch_states.o: $(LIB_H) smatch.h smatch_slist.h smatch_extra.h smatch_expression_stacks.o: $(LIB_H) smatch.h smatch_oom.c: $(LIB_H) smatch.h smatch_redefine.c: $(LIB_H) smatch.h -smatch.o: smatch.c $(LIB_H) smatch.h +smatch.o: smatch.c $(LIB_H) smatch.h check_list.h $(CC) -c smatch.c -DSMATCHDATADIR='"$(SMATCHDATADIR)"' $(SMATCH_CHECKS): smatch.h smatch_slist.h smatch_extra.h test-unssa.o: $(LIB_H) diff --git a/check_list.h b/check_list.h new file mode 100644 index 00000000..0cd4eec5 --- /dev/null +++ b/check_list.h @@ -0,0 +1,50 @@ +#ifndef CK +#define CK(_x) void _x(int id); + +CK(register_smatch_extra) /* smatch_extra always has to be first */ +CK(register_modification_hooks) + +CK(register_smatch_ignore) +CK(check_debug) +CK(check_assigned_expr) + +CK(check_null_deref) +CK(check_overflow) +CK(register_check_overflow_again) +CK(check_memory) +CK(check_type) +CK(check_allocation_funcs) +CK(check_leaks) +CK(check_frees_argument) +CK(check_balanced) +CK(check_deref_check) +CK(check_redundant_null_check) +CK(check_signed) +CK(check_precedence) +CK(check_format_string) +CK(check_unused_ret) +CK(check_dma_on_stack) +CK(check_param_mapper) +CK(check_call_tree) +CK(check_dev_queue_xmit) + +/* <- your test goes here */ +/* CK(register_template) */ + +/* kernel specific */ +CK(check_locking) +CK(check_puts_argument) +CK(check_err_ptr) +CK(check_err_ptr_deref) +CK(check_hold_dev) + +/* wine specific stuff */ +CK(check_wine) +CK(check_wine_filehandles) +CK(check_wine_WtoA) + +CK(register_containers) +CK(register_implications) /* implications always has to be last */ + +#undef CK +#endif diff --git a/smatch.c b/smatch.c index 40de7f01..d3af161a 100644 --- a/smatch.c +++ b/smatch.c @@ -12,6 +12,7 @@ #include #include #include "smatch.h" +#include "check_list.h" char *option_project_str = (char *)""; enum project_type option_project = PROJ_NONE; @@ -25,97 +26,14 @@ int option_param_mapper = 0; int option_call_tree = 0; typedef void (*reg_func) (int id); -void register_smatch_extra(int id); -void register_smatch_ignore(int id); -void register_implications(int id); -void register_function_hooks(int id); -void register_modification_hooks(int id); -void register_containers(int id); -void check_debug(int id); -void check_assigned_expr(int id); -void check_null_deref(int id); -void check_overflow(int id); -void register_check_overflow_again(int id); -void check_locking(int id); -void check_memory(int id); -void check_frees_argument(int id); -void check_puts_argument(int id); -void check_leaks(int id); -void check_type(int id); -void check_allocation_funcs(int id); -void check_err_ptr(int id); -void check_err_ptr_deref(int id); -void check_balanced(int id); -void check_deref_check(int id); -void check_hold_dev(int id); -void check_redundant_null_check(int id); -void check_signed(int id); -void check_precedence(int id); -void check_format_string(int id); -void check_unused_ret(int id); -void check_dma_on_stack(int id); -void check_param_mapper(int id); -void check_call_tree(int id); -void check_dev_queue_xmit(int id); -/* <- your test goes here */ - -/* may as well put wine scripts all together */ -void check_wine(int id); -void check_wine_filehandles(int id); -void check_wine_WtoA(int id); - -/* void register_template(int id); */ - -#define CK(_x) {.name = #_x, .func = &_x} +#define CK(_x) {.name = #_x, .func = &_x}, static struct reg_func_info { const char *name; reg_func func; } reg_funcs[] = { - CK(register_smatch_extra), /* smatch_extra always has to be first */ - CK(register_modification_hooks), - - CK(register_smatch_ignore), - CK(check_debug), - CK(check_assigned_expr), - - CK(check_null_deref), - CK(check_overflow), - CK(register_check_overflow_again), - CK(check_memory), - CK(check_type), - CK(check_allocation_funcs), - CK(check_leaks), - CK(check_frees_argument), - CK(check_balanced), - CK(check_deref_check), - CK(check_redundant_null_check), - CK(check_signed), - CK(check_precedence), - CK(check_format_string), - CK(check_unused_ret), - CK(check_dma_on_stack), - CK(check_param_mapper), - CK(check_call_tree), - CK(check_dev_queue_xmit), - - /* <- your test goes here */ - /* CK(register_template), */ - - /* kernel specific */ - CK(check_locking), - CK(check_puts_argument), - CK(check_err_ptr), - CK(check_err_ptr_deref), - CK(check_hold_dev), - - /* wine specific stuff */ - CK(check_wine), - CK(check_wine_filehandles), - CK(check_wine_WtoA), - - CK(register_containers), - CK(register_implications), /* implications always has to be last */ +#include "check_list.h" }; +#undef CK const char *check_name(unsigned short id) { -- 2.11.4.GIT