X-Git-Url: http://git.ozlabs.org/?a=blobdiff_plain;f=ccan%2Fstrset%2Fstrset.c;h=06b0d7a76c35fe119353310888b4dbf1828d949b;hb=eb5cf99742db1b02cc5cac4be19226b58009a106;hp=7c64b0cd016631017024da239cc29ad7e5470ec0;hpb=2578442d9f40350f51cca44eeef60768dbae2dc6;p=ccan diff --git a/ccan/strset/strset.c b/ccan/strset/strset.c index 7c64b0cd..06b0d7a7 100644 --- a/ccan/strset/strset.c +++ b/ccan/strset/strset.c @@ -57,16 +57,17 @@ static const char *closest(struct strset n, const char *member) return n.u.s; } -char *strset_test(const struct strset *set, const char *member) +char *strset_get(const struct strset *set, const char *member) { const char *str; - /* Empty set? */ - if (!set->u.n) - return NULL; - str = closest(*set, member); - if (streq(member, str)) - return (char *)str; + /* Non-empty set? */ + if (set->u.n) { + str = closest(*set, member); + if (streq(member, str)) + return (char *)str; + } + errno = ENOENT; return NULL; } @@ -89,7 +90,7 @@ static bool set_string(struct strset *set, return true; } -bool strset_set(struct strset *set, const char *member) +bool strset_add(struct strset *set, const char *member) { size_t len = strlen(member); const u8 *bytes = (const u8 *)member; @@ -162,7 +163,7 @@ bool strset_set(struct strset *set, const char *member) return true; } -char *strset_clear(struct strset *set, const char *member) +char *strset_del(struct strset *set, const char *member) { size_t len = strlen(member); const u8 *bytes = (const u8 *)member; @@ -171,8 +172,10 @@ char *strset_clear(struct strset *set, const char *member) u8 direction = 0; /* prevent bogus gcc warning. */ /* Empty set? */ - if (!set->u.n) + if (!set->u.n) { + errno = ENOENT; return NULL; + } /* Find closest, but keep track of parent. */ n = set; @@ -184,8 +187,10 @@ char *strset_clear(struct strset *set, const char *member) if (unlikely(n->u.n->byte_num == (size_t)-1)) { const char *empty_str = n->u.n->child[0].u.s; - if (member[0]) + if (member[0]) { + errno = ENOENT; return NULL; + } /* Sew empty string back so remaining logic works */ free(n->u.n); @@ -203,8 +208,10 @@ char *strset_clear(struct strset *set, const char *member) } /* Did we find it? */ - if (!streq(member, n->u.s)) + if (!streq(member, n->u.s)) { + errno = ENOENT; return NULL; + } ret = n->u.s; @@ -222,19 +229,19 @@ char *strset_clear(struct strset *set, const char *member) } static bool iterate(struct strset n, - bool (*handle)(const char *, void *), void *data) + bool (*handle)(const char *, void *), const void *data) { if (n.u.s[0]) - return handle(n.u.s, data); + return handle(n.u.s, (void *)data); if (unlikely(n.u.n->byte_num == (size_t)-1)) - return handle(n.u.n->child[0].u.s, data); + return handle(n.u.n->child[0].u.s, (void *)data); return iterate(n.u.n->child[0], handle, data) - || iterate(n.u.n->child[1], handle, data); + && iterate(n.u.n->child[1], handle, data); } void strset_iterate_(const struct strset *set, - bool (*handle)(const char *, void *), void *data) + bool (*handle)(const char *, void *), const void *data) { /* Empty set? */ if (!set->u.n) @@ -283,20 +290,20 @@ const struct strset *strset_prefix(const struct strset *set, const char *prefix) return top; } -static void destroy(struct strset n) +static void clear(struct strset n) { if (!n.u.s[0]) { if (likely(n.u.n->byte_num != (size_t)-1)) { - destroy(n.u.n->child[0]); - destroy(n.u.n->child[1]); + clear(n.u.n->child[0]); + clear(n.u.n->child[1]); } free(n.u.n); } } -void strset_destroy(struct strset *set) +void strset_clear(struct strset *set) { if (set->u.n) - destroy(*set); + clear(*set); set->u.n = NULL; }