From cc9ea0ae10f46f8fdec14ae26c19ed490fd3b71c Mon Sep 17 00:00:00 2001 From: Sascha Hauer Date: Tue, 2 Feb 2021 21:11:56 +0100 Subject: stringlist: Add adding sort uniq Function to add an entry sorted to a string list only when it doesn't exist. Signed-off-by: Sascha Hauer --- include/stringlist.h | 1 + lib/stringlist.c | 23 +++++++++++++++++++++++ 2 files changed, 24 insertions(+) diff --git a/include/stringlist.h b/include/stringlist.h index 5cd452ca5f..dbf159da91 100644 --- a/include/stringlist.h +++ b/include/stringlist.h @@ -12,6 +12,7 @@ struct string_list { int string_list_add(struct string_list *sl, const char *str); int string_list_add_asprintf(struct string_list *sl, const char *fmt, ...); int string_list_add_sorted(struct string_list *sl, const char *str); +int string_list_add_sort_uniq(struct string_list *sl, const char *str); int string_list_contains(struct string_list *sl, const char *str); void string_list_print_by_column(struct string_list *sl); diff --git a/lib/stringlist.c b/lib/stringlist.c index 8e92c1b207..719fecdaa4 100644 --- a/lib/stringlist.c +++ b/lib/stringlist.c @@ -60,6 +60,29 @@ int string_list_add_sorted(struct string_list *sl, const char *str) return 0; } +int string_list_add_sort_uniq(struct string_list *sl, const char *str) +{ + struct string_list *new, *entry = sl; + + string_list_for_each_entry(entry, sl) { + int cmp = strcmp(entry->str, str); + + if (cmp < 0) + continue; + if (cmp == 0) + return 0; + + break; + } + + new = xmalloc(sizeof(*new)); + new->str = xstrdup(str); + + list_add_tail(&new->list, &entry->list); + + return 0; +} + int string_list_contains(struct string_list *sl, const char *str) { struct string_list *entry; -- cgit v1.2.3