From c0b55c465e9c99ce14e50063061f86dea4170a73 Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Fri, 29 Aug 2014 13:09:10 +0300 Subject: [PATCH] slist: export the set_state_stree_perm() function to everyone This was used in smatch_type_val.c before but I want it to be available for other uses. Signed-off-by: Dan Carpenter --- smatch_estate.c | 26 ++++++++++++++++++++++++++ smatch_extra.h | 2 ++ smatch_slist.c | 16 ++++++++++++++++ smatch_slist.h | 3 ++- smatch_type_val.c | 41 ----------------------------------------- 5 files changed, 46 insertions(+), 42 deletions(-) diff --git a/smatch_estate.c b/smatch_estate.c index 0225c0f7..701dafd5 100644 --- a/smatch_estate.c +++ b/smatch_estate.c @@ -349,4 +349,30 @@ struct smatch_state *estate_filter_sval(struct smatch_state *orig, sval_t sval) return estate_filter_range(orig, sval, sval); } +/* + * One of the complications is that smatch tries to free a bunch of data at the + * end of every function. + */ +struct data_info *clone_dinfo_perm(struct data_info *dinfo) +{ + struct data_info *ret; + + ret = malloc(sizeof(*ret)); + ret->related = NULL; + ret->value_ranges = clone_rl_permanent(dinfo->value_ranges); + ret->hard_max = 0; + ret->fuzzy_max = dinfo->fuzzy_max; + return ret; +} + +struct smatch_state *clone_estate_perm(struct smatch_state *state) +{ + struct smatch_state *ret; + + ret = malloc(sizeof(*ret)); + ret->name = alloc_string(state->name); + ret->data = clone_dinfo_perm(get_dinfo(state)); + return ret; +} + diff --git a/smatch_extra.h b/smatch_extra.h index b0be4990..8da31cf8 100644 --- a/smatch_extra.h +++ b/smatch_extra.h @@ -131,6 +131,8 @@ struct smatch_state *get_implied_estate(struct expression *expr); struct smatch_state *estate_filter_sval(struct smatch_state *orig, sval_t filter); struct smatch_state *estate_filter_range(struct smatch_state *orig, sval_t filter_min, sval_t filter_max); +struct data_info *clone_dinfo_perm(struct data_info *dinfo); +struct smatch_state *clone_estate_perm(struct smatch_state *state); /* smatch_extra.c */ void call_extra_mod_hooks(const char *name, struct symbol *sym, struct smatch_state *state); diff --git a/smatch_slist.c b/smatch_slist.c index 772a2914..9eb8566e 100644 --- a/smatch_slist.c +++ b/smatch_slist.c @@ -447,6 +447,22 @@ struct sm_state *set_state_stree(struct stree **stree, int owner, const char *na return new; } +void set_state_stree_perm(struct stree **stree, int owner, const char *name, + struct symbol *sym, struct smatch_state *state) +{ + struct sm_state *sm; + + sm = malloc(sizeof(*sm) + strlen(name) + 1); + memset(sm, 0, sizeof(*sm)); + sm->owner = owner; + sm->name = (char *)(sm + 1); + strcpy((char *)sm->name, name); + sm->sym = sym; + sm->state = state; + + overwrite_sm_state_stree(stree, sm); +} + void delete_state_stree(struct stree **stree, int owner, const char *name, struct symbol *sym) { diff --git a/smatch_slist.h b/smatch_slist.h index d619e400..800696d5 100644 --- a/smatch_slist.h +++ b/smatch_slist.h @@ -45,7 +45,8 @@ void overwrite_sm_state_stree(struct stree **stree, struct sm_state *sm); void overwrite_sm_state_stree_stack(struct stree_stack **stack, struct sm_state *sm); struct sm_state *set_state_stree(struct stree **stree, int owner, const char *name, struct symbol *sym, struct smatch_state *state); - +void set_state_stree_perm(struct stree **stree, int owner, const char *name, + struct symbol *sym, struct smatch_state *state); void delete_state_stree(struct stree **stree, int owner, const char *name, struct symbol *sym); diff --git a/smatch_type_val.c b/smatch_type_val.c index d8ea3cc7..704aee4e 100644 --- a/smatch_type_val.c +++ b/smatch_type_val.c @@ -86,47 +86,6 @@ int get_db_type_rl(struct expression *expr, struct range_list **rl) return 1; } -/* - * One of the complications is that smatch tries to free a bunch of data at the - * end of every function. - */ -static struct data_info *clone_dinfo_perm(struct data_info *dinfo) -{ - struct data_info *ret; - - ret = malloc(sizeof(*ret)); - ret->related = NULL; - ret->value_ranges = clone_rl_permanent(dinfo->value_ranges); - ret->hard_max = 0; - ret->fuzzy_max = dinfo->fuzzy_max; - return ret; -} - -static struct smatch_state *clone_estate_perm(struct smatch_state *state) -{ - struct smatch_state *ret; - - ret = malloc(sizeof(*ret)); - ret->name = alloc_string(state->name); - ret->data = clone_dinfo_perm(get_dinfo(state)); - return ret; -} - -static void set_state_stree_perm(struct stree **stree, int owner, const char *name, - struct symbol *sym, struct smatch_state *state) -{ - struct sm_state *sm; - - sm = malloc(sizeof(*sm)); - memset(sm, 0, sizeof(*sm)); - sm->owner = owner; - sm->name = name; - sm->sym = sym; - sm->state = state; - - overwrite_sm_state_stree(stree, sm); -} - static void add_type_val(char *member, struct range_list *rl) { struct smatch_state *old, *add, *new; -- 2.11.4.GIT