struct _E_Msg_Event
{
- const char *name;
- const char *info;
+ char *name;
+ char *info;
int val;
E_Object *obj;
};
EAPI void
e_msg_send(const char *name, const char *info, int val, E_Object *obj)
{
+ unsigned int size, pos, name_len, info_len;
E_Msg_Event *ev;
- ev = calloc(1, sizeof(E_Msg_Event));
- /* FIXME: probably better todup the strings but merge with a single
- * malloc for the event struct */
- if (name) ev->name = evas_stringshare_add(name);
- if (info) ev->info = evas_stringshare_add(info);
+ name_len = info_len = size = 0;
+ size = sizeof(E_Msg_Event);
+ if (name) name_len = strlen(name) + 1;
+ if (info) info_len = strlen(info) + 1;
+ ev = malloc(size + name_len + info_len);
+ if (!ev) return;
+ pos = size;
+ if (name)
+ {
+ ev->name = ((char *)ev) + pos;
+ pos += name_len;
+ strcpy(ev->name, name);
+ }
+ if (info)
+ {
+ ev->info = ((char *)ev) + pos;
+ strcpy(ev->info, info);
+ }
ev->val = val;
ev->obj = obj;
if (ev->obj) e_object_ref(ev->obj);
E_Msg_Event *e;
e = ev;
- if (e->name) evas_stringshare_del(e->name);
- if (e->info) evas_stringshare_del(e->info);
if (e->obj) e_object_unref(e->obj);
}