[sheepdog] [PATCH] improve type check of xbsearch
MORITA Kazutaka
morita.kazutaka at gmail.com
Fri Jun 7 07:32:25 CEST 2013
From: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
It is possible that 'key' is a const variable and 'base' is not, or
vice versa. This patches allows such cases.
This also makes xbsearch() return the type of 'base' instead of a void
pointer.
Signed-off-by: MORITA Kazutaka <morita.kazutaka at lab.ntt.co.jp>
---
include/util.h | 11 ++++++++---
1 file changed, 8 insertions(+), 3 deletions(-)
diff --git a/include/util.h b/include/util.h
index 1c42ff8..8fb1db2 100644
--- a/include/util.h
+++ b/include/util.h
@@ -112,9 +112,14 @@ int atomic_create_and_write(const char *path, char *buf, size_t len);
/* a type safe version of bsearch() */
#define xbsearch(key, base, nmemb, compar) \
({ \
- (void) (key == base); \
- assert(compar(key, key) == 0); \
- bsearch(key, base, nmemb, sizeof(*(base)), (comparison_fn_t)compar); \
+ typeof(&(base)[0]) __ret = NULL; \
+ if (nmemb > 0) { \
+ assert(compar(key, key) == 0); \
+ assert(compar(base, base) == 0); \
+ __ret = bsearch(key, base, nmemb, sizeof(*(base)), \
+ (comparison_fn_t)compar); \
+ } \
+ __ret; \
})
#ifdef assert
--
1.7.9.5
More information about the sheepdog
mailing list