From 235274a0b5f608931cb3cf2eb2c6a2b24294e2ca Mon Sep 17 00:00:00 2001 From: Dan Carpenter Date: Tue, 26 Feb 2019 08:37:09 +0300 Subject: [PATCH] string_list: make insert_string() return false if it's already there If we return false if it's already there, that lets us make a two step process into a one step process and it's a speed up because of the fewer calls to strcmp(). Signed-off-by: Dan Carpenter --- smatch.h | 2 +- smatch_constraints.c | 3 +-- smatch_db.c | 3 +-- smatch_string_list.c | 9 ++++----- 4 files changed, 7 insertions(+), 10 deletions(-) diff --git a/smatch.h b/smatch.h index 41fcbbea..f0be557b 100644 --- a/smatch.h +++ b/smatch.h @@ -1124,7 +1124,7 @@ sval_t ll_to_sval(long long val); /* smatch_string_list.c */ int list_has_string(struct string_list *str_list, const char *str); -void insert_string(struct string_list **str_list, const char *str); +int insert_string(struct string_list **str_list, const char *str); struct string_list *clone_str_list(struct string_list *orig); struct string_list *combine_string_lists(struct string_list *one, struct string_list *two); diff --git a/smatch_constraints.c b/smatch_constraints.c index f7ab7f6d..4ce53646 100644 --- a/smatch_constraints.c +++ b/smatch_constraints.c @@ -342,9 +342,8 @@ free_data: struct string_list *saved_constraints; static void save_new_constraint(const char *con) { - if (list_has_string(saved_constraints, con)) + if (!insert_string(&saved_constraints, con)) return; - insert_string(&saved_constraints, con); sql_save_constraint(con); } diff --git a/smatch_db.c b/smatch_db.c index 046eb995..e5fff5dd 100644 --- a/smatch_db.c +++ b/smatch_db.c @@ -1038,9 +1038,8 @@ static char *get_next_ptr_name(void) char *ptr; FOR_EACH_PTR(ptr_names, ptr) { - if (list_has_string(ptr_names_done, ptr)) + if (!insert_string(&ptr_names_done, ptr)) continue; - insert_string(&ptr_names_done, ptr); return ptr; } END_FOR_EACH_PTR(ptr); return NULL; diff --git a/smatch_string_list.c b/smatch_string_list.c index aa5792d1..cf8e21ca 100644 --- a/smatch_string_list.c +++ b/smatch_string_list.c @@ -36,7 +36,7 @@ int list_has_string(struct string_list *str_list, const char *str) return 0; } -void insert_string(struct string_list **str_list, const char *_new) +int insert_string(struct string_list **str_list, const char *_new) { char *new = (char *)_new; char *tmp; @@ -45,18 +45,17 @@ void insert_string(struct string_list **str_list, const char *_new) FOR_EACH_PTR(*str_list, tmp) { cmp = strcmp(tmp, new); if (cmp < 0) - if (strcmp(tmp, new) < 0) continue; else if (cmp == 0) { - else if (strcmp(tmp, new) == 0) { - return; + return 0; } else { INSERT_CURRENT(alloc_string(new), tmp); - return; + return 1; } } END_FOR_EACH_PTR(tmp); new = alloc_string(new); add_ptr_list(str_list, new); + return 1; } struct string_list *clone_str_list(struct string_list *orig) -- 2.11.4.GIT