#define EINA_STRINGSHARE_BUCKETS 256
#define EINA_STRINGSHARE_MASK 0xFF
-#define EINA_MAGIC_CHECK_STRINGSHARE_HEAD(d) \
+#define EINA_MAGIC_CHECK_STRINGSHARE_HEAD(d, ...) \
do { \
if (!EINA_MAGIC_CHECK((d), EINA_MAGIC_STRINGSHARE_HEAD)) \
- EINA_MAGIC_FAIL((d), EINA_MAGIC_STRINGSHARE_HEAD); \
+ { \
+ EINA_MAGIC_FAIL((d), EINA_MAGIC_STRINGSHARE_HEAD); \
+ return __VA_ARGS__; \
+ } \
} while (0);
#define EINA_MAGIC_CHECK_STRINGSHARE_NODE(d) \
static int
_eina_stringshare_cmp(const Eina_Stringshare_Head *ed, const int *hash, __UNUSED__ int length, __UNUSED__ void *data)
{
- EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed);
+ EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed, 0);
return ed->hash - *hash;
}
static Eina_Rbtree_Direction
_eina_stringshare_node(const Eina_Stringshare_Head *left, const Eina_Stringshare_Head *right, __UNUSED__ void *data)
{
- EINA_MAGIC_CHECK_STRINGSHARE_HEAD(left);
- EINA_MAGIC_CHECK_STRINGSHARE_HEAD(right);
+ EINA_MAGIC_CHECK_STRINGSHARE_HEAD(left, 0);
+ EINA_MAGIC_CHECK_STRINGSHARE_HEAD(right, 0);
if (left->hash - right->hash < 0)
return EINA_RBTREE_LEFT;
if (!ed)
return _eina_stringshare_add_head(p_bucket, hash, str, slen);
- EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed);
+ EINA_MAGIC_CHECK_STRINGSHARE_HEAD(ed, NULL);
el = _eina_stringshare_head_find(ed, str, slen);
if (el)