EIRC_EVENT_JOIN = ecore_event_type_new(); callbacks.event_join = event_join; static void _eirc_event_join_free(void *data, void *event) { Eirc_Event_Join *ev; ev = event; if (!ev) return; IF_FREE(ev->session); IF_FREE(ev->origin); IF_FREE(ev->channel); IF_FREE(ev); } static void event_join (irc_session_t * session, const char * event, const char * origin, const char ** params, unsigned int count) { Eirc_Event_Join *ev; if (count != 1) return; ev = ALLOC(Eirc_Event_Join); EV_SESS_CTX_ALLOC_SET; IF_STRDUP(ev->origin, origin); IF_STRDUP(ev->channel, params[0]); ecore_event_add(EIRC_EVENT_JOIN, ev, _eirc_event_join_free, NULL); dump_event (session, event, origin, params, count); }