diff --git a/fragment.c b/fragment.c index d42321d..481b48f 100644 --- a/fragment.c +++ b/fragment.c @@ -66,11 +66,31 @@ pkg_fragment_add(pkg_fragment_t *head, const char *string) return pkg_fragment_append(head, frag); } +bool +pkg_fragment_exists(pkg_fragment_t *head, pkg_fragment_t *base) +{ + pkg_fragment_t *node; + + foreach_list_entry(head, node) + { + if (base->type != node->type) + continue; + + if (!strcmp(base->data, node->data)) + return true; + } + + return false; +} + pkg_fragment_t * pkg_fragment_copy(pkg_fragment_t *head, pkg_fragment_t *base) { pkg_fragment_t *frag; + if (pkg_fragment_exists(head, base)) + return head; + frag = calloc(sizeof(pkg_fragment_t), 1); frag->type = base->type; diff --git a/pkg.h b/pkg.h index 8787a91..2cca40c 100644 --- a/pkg.h +++ b/pkg.h @@ -138,5 +138,6 @@ pkg_fragment_t *pkg_fragment_append(pkg_fragment_t *head, pkg_fragment_t *tail); pkg_fragment_t *pkg_fragment_add(pkg_fragment_t *head, const char *string); pkg_fragment_t *pkg_fragment_copy(pkg_fragment_t *head, pkg_fragment_t *base); void pkg_fragment_delete(pkg_fragment_t *node); +bool pkg_fragment_exists(pkg_fragment_t *head, pkg_fragment_t *base); #endif