static void
_e_fm2_op_registry_entry_listeners_call(const E_Fm2_Op_Registry_Entry_Internal *e)
{
- E_Fm2_Op_Registry_Entry_Listener *l, **shadow;
+ E_Fm2_Op_Registry_Entry_Listener *listener;
+ Eina_Inlist *l;
const E_Fm2_Op_Registry_Entry *entry;
- unsigned int i, count;
-
- /* NB: iterate on a copy in order to allow listeners to be deleted
- * from callbacks. number of listeners should be small, so the
- * following should do fine.
- */
- count = eina_inlist_count(e->listeners);
- if (count < 1) return;
- shadow = alloca(sizeof(*shadow) * count);
-
- i = 0;
- EINA_INLIST_FOREACH(e->listeners, l)
- shadow[i++] = l;
+ if (eina_inlist_count(e->listeners) < 1) return;
- entry = &(e->entry);
- for (i = 0; i < count; i++)
- shadow[i]->cb(shadow[i]->data, entry);
+ EINA_INLIST_FOREACH_SAFE(e->listeners, l, listener)
+ listener->cb(listener->data, &e->entry);
}
static void