X-Git-Url: https://git.ozlabs.org/?p=ccan;a=blobdiff_plain;f=ccan%2Fsparse_bsearch%2Fsparse_bsearch.h;h=5a0a7348f1d50b0362a49d3f290a19f8df4cc8b8;hp=731f9a4f05f9ec199d6f5cacbf8f4adbcd46544a;hb=8fc7a90a8db345c4276419d11f8731afc63f65f5;hpb=1fe7f55b1efc5deefb20815a03b56c8ef0f6dc53 diff --git a/ccan/sparse_bsearch/sparse_bsearch.h b/ccan/sparse_bsearch/sparse_bsearch.h index 731f9a4f..5a0a7348 100644 --- a/ccan/sparse_bsearch/sparse_bsearch.h +++ b/ccan/sparse_bsearch/sparse_bsearch.h @@ -14,9 +14,10 @@ * @validfn: whether this element is valid. * * Binary search of a sorted array, which may have some invalid entries. + * Note that cmpfn and validfn take const pointers. * * Example: - * static bool val_valid(unsigned int *val) + * static bool val_valid(const unsigned int *val) * { * return *val != 0; * } @@ -40,8 +41,13 @@ #define sparse_bsearch(key, base, nmemb, cmpfn, validfn) \ _sparse_bsearch((key)+check_types_match((key), &(base)[0]), \ (base), (nmemb), sizeof((base)[0]), \ - typesafe_cb_cmp(int, (cmpfn), (base)), \ - typesafe_cb_const(bool, (validfn), (base))) + typesafe_cb_cast(int (*)(const void *, const void *), \ + int (*)(const __typeof__(*(base)) *, \ + const __typeof__(*(base)) *), \ + (cmpfn)), \ + typesafe_cb_cast(bool (*)(const void *), \ + bool (*)(const __typeof__(*(base)) *), \ + (validfn))) void *_sparse_bsearch(const void *key, const void *base, size_t nmemb, size_t size,