Eobj: Fixed a potential bug in eobj_super_do.

SVN revision: 70126
This commit is contained in:
Tom Hacohen 2012-04-12 08:27:31 +00:00
parent 6a18b75743
commit 69bf58ba95
1 changed files with 6 additions and 4 deletions

View File

@ -215,13 +215,13 @@ typedef struct
const Eobj_Class **kls_itr; const Eobj_Class **kls_itr;
} Eobj_Kls_Itr_Node; } Eobj_Kls_Itr_Node;
static inline void static inline Eina_Bool
_eobj_kls_itr_init(Eobj *obj, Eobj_Op op) _eobj_kls_itr_init(Eobj *obj, Eobj_Op op)
{ {
if (obj->kls_itr && if (obj->kls_itr &&
EINA_INLIST_CONTAINER_GET(obj->kls_itr, Eobj_Kls_Itr_Node)) EINA_INLIST_CONTAINER_GET(obj->kls_itr, Eobj_Kls_Itr_Node))
{ {
/* Nothing ATM. */ return EINA_FALSE;
} }
else else
{ {
@ -230,6 +230,8 @@ _eobj_kls_itr_init(Eobj *obj, Eobj_Op op)
node->kls_itr = obj->klass->mro; node->kls_itr = obj->klass->mro;
obj->kls_itr = eina_inlist_prepend(obj->kls_itr, obj->kls_itr = eina_inlist_prepend(obj->kls_itr,
EINA_INLIST_GET(node)); EINA_INLIST_GET(node));
return EINA_TRUE;
} }
} }
@ -410,7 +412,7 @@ eobj_super_do(Eobj *obj, Eobj_Op op, ...)
Eina_Bool ret = EINA_TRUE; Eina_Bool ret = EINA_TRUE;
va_list p_list; va_list p_list;
_eobj_kls_itr_init(obj, op); Eina_Bool kls_itr_end = _eobj_kls_itr_init(obj, op);
obj_klass = _eobj_kls_itr_next(obj); obj_klass = _eobj_kls_itr_next(obj);
if (!obj_klass) goto end; if (!obj_klass) goto end;
@ -430,7 +432,7 @@ eobj_super_do(Eobj *obj, Eobj_Op op, ...)
va_end(p_list); va_end(p_list);
end: end:
_eobj_kls_itr_end(obj, op); if (kls_itr_end) _eobj_kls_itr_end(obj, op);
return ret; return ret;
} }