diff options
author | Alasdair Kergon <agk@redhat.com> | 2003-10-15 20:04:29 +0000 |
---|---|---|
committer | Alasdair Kergon <agk@redhat.com> | 2003-10-15 20:04:29 +0000 |
commit | ac21f470341c1bdbc6157f6f47c670a037ece08f (patch) | |
tree | bef206c3b5ad4cf29432a48655bdea7e83a3796a /lib/datastruct/str_list.c | |
parent | f2b7349e2f4e6a68678e834301d6fa2182c45505 (diff) | |
download | lvm2-ac21f470341c1bdbc6157f6f47c670a037ece08f.tar.gz lvm2-ac21f470341c1bdbc6157f6f47c670a037ece08f.tar.xz lvm2-ac21f470341c1bdbc6157f6f47c670a037ece08f.zip |
more str_list fns
Diffstat (limited to 'lib/datastruct/str_list.c')
-rw-r--r-- | lib/datastruct/str_list.c | 50 |
1 files changed, 41 insertions, 9 deletions
diff --git a/lib/datastruct/str_list.c b/lib/datastruct/str_list.c index 5ef3c56a..b414b51e 100644 --- a/lib/datastruct/str_list.c +++ b/lib/datastruct/str_list.c @@ -7,10 +7,23 @@ #include "lib.h" #include "str_list.h" -int str_list_add(struct pool *mem, struct list *sl, const char *str) +struct list *str_list_create(struct pool *mem) +{ + struct list *sl; + + if (!(sl = pool_alloc(mem, sizeof(struct list)))) { + stack; + return NULL; + } + + list_init(sl); + + return sl; +} + +int str_list_add(struct pool *mem, struct list *sll, const char *str) { struct str_list *sln; - struct list *slh; if (!str) { stack; @@ -18,10 +31,8 @@ int str_list_add(struct pool *mem, struct list *sl, const char *str) } /* Already in list? */ - list_iterate(slh, sl) { - if (!strcmp(str, list_item(slh, struct str_list)->str)) - return 1; - } + if (str_list_match_item(sll, str)) + return 1; if (!(sln = pool_alloc(mem, sizeof(*sln)))) { stack; @@ -29,16 +40,16 @@ int str_list_add(struct pool *mem, struct list *sl, const char *str) } sln->str = str; - list_add(sl, &sln->list); + list_add(sll, &sln->list); return 1; } -int str_list_del(struct list *sl, const char *str) +int str_list_del(struct list *sll, const char *str) { struct list *slh, *slht; - list_iterate_safe(slh, slht, sl) { + list_iterate_safe(slh, slht, sll) { if (!strcmp(str, list_item(slh, struct str_list)->str)) list_del(slh); } @@ -46,3 +57,24 @@ int str_list_del(struct list *sl, const char *str) return 1; } +int str_list_match_item(struct list *sll, const char *str) +{ + struct str_list *sl; + + list_iterate_items(sl, sll) + if (!strcmp(str, sl->str)) + return 1; + + return 0; +} + +int str_list_match_list(struct list *sll, struct list *sll2) +{ + struct str_list *sl; + + list_iterate_items(sl, sll) + if (str_list_match_item(sll2, sl->str)) + return 1; + + return 0; +} |