struct_assignment: use assigned expression
[smatch.git] / check_sentinel_ctltable.c
blobb9351beabb8cb53fdf016eaa0c1d9123c6363aeb
1 #include "smatch.h"
3 struct non_null_ctltable_elems {
4 const char *name;
5 const int len;
6 };
8 static struct non_null_ctltable_elems non_null_elems[] = {
9 {.name = "->procname", .len = 10},
10 {.name = "->proc_handler", .len = 14},
13 static int match_ctl_table_array_sentinel(struct expression *expr)
15 char *member_name = NULL;
17 if (!expr)
18 return 0;
20 member_name = get_member_name(expr);
21 if (!member_name)
22 return 0;
24 if (strncmp(member_name, "(struct ctl_table)", 18) != 0)
25 return 0;
27 for (int i = 0 ; i < ARRAY_SIZE(non_null_elems) ; ++i) {
28 if (strncmp(member_name + 18, non_null_elems[i].name, non_null_elems[i].len) == 0) {
29 sm_warning ("(struct ctl_table)%s cannot be NULL. Expression : %s",
30 non_null_elems[i].name, expr_to_str(expr));
31 return 0;
35 return 0;
38 void check_sentinel_ctltable(int id)
40 if (option_project != PROJ_KERNEL)
41 return;
43 add_hook(&match_ctl_table_array_sentinel, EXPR_HOOK);