X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fstrset%2Fstrset.c;h=8b38ba2978f617dc4d018c045ab4c8b236bedb87;hp=7c64b0cd016631017024da239cc29ad7e5470ec0;hb=932aeb6dcc4a6df2d08755f743659451c9721447;hpb=2578442d9f40350f51cca44eeef60768dbae2dc6 diff --git a/ccan/strset/strset.c b/ccan/strset/strset.c index 7c64b0cd..8b38ba29 100644 --- a/ccan/strset/strset.c +++ b/ccan/strset/strset.c @@ -61,12 +61,13 @@ char *strset_test(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; } @@ -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); } 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)