Commit 140cd169 authored by Rusty Russell's avatar Rusty Russell

strmap: allow const arguments to strset_iterate().

parent 932aeb6d
......@@ -174,17 +174,19 @@ char *strmap_del_(struct strmap *map, const char *member, void **valuep)
}
static bool iterate(struct strmap n,
bool (*handle)(const char *, void *, void *), void *data)
bool (*handle)(const char *, void *, void *),
const void *data)
{
if (n.v)
return handle(n.u.s, n.v, data);
return handle(n.u.s, n.v, (void *)data);
return iterate(n.u.n->child[0], handle, data)
|| iterate(n.u.n->child[1], handle, data);
}
void strmap_iterate_(const struct strmap *map,
bool (*handle)(const char *, void *, void *), void *data)
bool (*handle)(const char *, void *, void *),
const void *data)
{
/* Empty map? */
if (!map->u.n)
......
......@@ -189,8 +189,8 @@ void strmap_clear_(struct strmap *map);
__typeof__(arg)), (handle)), \
(arg))
void strmap_iterate_(const struct strmap *map,
bool (*handle)(const char *, void *, void *), void *data);
bool (*handle)(const char *, void *, void *),
const void *data);
/**
* strmap_prefix - return a submap matching a prefix
......
#include <ccan/strmap/strmap.h>
#include <ccan/strmap/strmap.c>
#include <ccan/tap/tap.h>
static bool found = false;
/* Make sure const args work. */
static bool find_string(const char *str, char *member, const char *cmp)
{
if (strcmp(member, cmp) == 0)
found = true;
return false;
}
int main(void)
{
struct strmap_charp {
STRMAP_MEMBERS(char *);
} map;
plan_tests(3);
strmap_init(&map);
ok1(strmap_add(&map, "hello", "hello"));
ok1(strmap_add(&map, "world", "world"));
strmap_iterate(&map, find_string, (const char *)"hello");
ok1(found);
strmap_clear(&map);
/* This exits depending on whether all tests passed */
return exit_status();
}
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment