Print this page
11506 smatch resync


 146         cache_sql(&get_vals, &db_info, "select value from sink_info where sink_name = '%s' and type = %d;",
 147                   name, DATA_VALUE);
 148         return db_info.rl;
 149 }
 150 
 151 static void update_cache(char *name, int is_static, struct range_list *rl)
 152 {
 153         cache_sql(NULL, NULL, "delete from sink_info where sink_name = '%s' and type = %d;",
 154                   name, DATA_VALUE);
 155         cache_sql(NULL, NULL, "insert into sink_info values ('%s', %d, '%s', %d, '', '%s');",
 156                   get_filename(), is_static, name, DATA_VALUE, show_rl(rl));
 157 }
 158 
 159 static void match_assign(struct expression *expr)
 160 {
 161         struct expression *left, *array;
 162         struct range_list *orig_rl, *rl;
 163         struct symbol *type;
 164         char *name;
 165 
 166         type = get_type(expr->right);
 167         if (!type || type->type != SYM_BASETYPE)
 168                 return;
 169 
 170         left = strip_expr(expr->left);
 171         if (!is_array(left))
 172                 return;
 173         array = get_array_base(left);
 174         name = get_array_name(array);
 175         if (!name)
 176                 return;
 177 
 178         if (expr->op != '=') {
 179                 rl = alloc_whole_rl(type);

 180         } else {
 181                 get_absolute_rl(expr->right, &rl);
 182                 rl = cast_rl(type, rl);
 183                 orig_rl = get_saved_rl(type, name);
 184                 rl = rl_union(orig_rl, rl);
 185         }
 186 
 187         update_cache(name, is_file_local(array), rl);
 188 }
 189 
 190 void register_array_values(int id)
 191 {
 192         my_id = id;
 193 
 194         add_hook(&match_assign, ASSIGNMENT_HOOK);
 195         add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
 196 }


 146         cache_sql(&get_vals, &db_info, "select value from sink_info where sink_name = '%s' and type = %d;",
 147                   name, DATA_VALUE);
 148         return db_info.rl;
 149 }
 150 
 151 static void update_cache(char *name, int is_static, struct range_list *rl)
 152 {
 153         cache_sql(NULL, NULL, "delete from sink_info where sink_name = '%s' and type = %d;",
 154                   name, DATA_VALUE);
 155         cache_sql(NULL, NULL, "insert into sink_info values ('%s', %d, '%s', %d, '', '%s');",
 156                   get_filename(), is_static, name, DATA_VALUE, show_rl(rl));
 157 }
 158 
 159 static void match_assign(struct expression *expr)
 160 {
 161         struct expression *left, *array;
 162         struct range_list *orig_rl, *rl;
 163         struct symbol *type;
 164         char *name;
 165 
 166         type = get_type(expr->left);
 167         if (!type || type->type != SYM_BASETYPE)
 168                 return;
 169 
 170         left = strip_expr(expr->left);
 171         if (!is_array(left))
 172                 return;
 173         array = get_array_base(left);
 174         name = get_array_name(array);
 175         if (!name)
 176                 return;
 177 
 178         if (expr->op != '=') {
 179                 rl = alloc_whole_rl(get_type(expr->right));
 180                 rl = cast_rl(type, rl);
 181         } else {
 182                 get_absolute_rl(expr->right, &rl);
 183                 rl = cast_rl(type, rl);
 184                 orig_rl = get_saved_rl(type, name);
 185                 rl = rl_union(orig_rl, rl);
 186         }
 187 
 188         update_cache(name, is_file_local(array), rl);
 189 }
 190 
 191 void register_array_values(int id)
 192 {
 193         my_id = id;
 194 
 195         add_hook(&match_assign, ASSIGNMENT_HOOK);
 196         add_hook(&match_assign, GLOBAL_ASSIGNMENT_HOOK);
 197 }