probably last patch for today...
Cheers,
--
Morten
:wq
Index: ecore_ipc.c
===
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore_ipc/ecore_ipc.c,v
retrieving revision 1.23
diff -u -r1.23 ecore_ipc.c
--- ecore_ipc.c 23 Sep 2005 06:28:05 - 1.23
+++ ecore_ipc.c 2 Jan 2006 04:26:50 -
@@ -228,9 +228,12 @@
int ECORE_IPC_EVENT_SERVER_DATA = 0;
static int init_count = 0;
-static Ecore_Ipc_Server*servers = NULL;
+static Ecore_List *servers = NULL;
static Ecore_Event_Handler *handler[6];
+static void *_ecore_ipc_server_del(void *data);
+static void *_ecore_ipc_client_del(void *data);
+
/**
* @defgroup Ecore_IPC_Library_Group IPC Library Functions
*
@@ -271,6 +274,10 @@
_ecore_ipc_event_client_data, NULL);
handler[i++] = ecore_event_handler_add(ECORE_CON_EVENT_SERVER_DATA,
_ecore_ipc_event_server_data, NULL);
+
+ servers = ecore_list_new();
+ ecore_list_set_free_cb(servers, ECORE_FREE_CB(_ecore_ipc_server_del));
+
return init_count;
}
@@ -287,7 +294,7 @@
if (--init_count != 0) return init_count;
- while (servers) ecore_ipc_server_del(servers);
+ ecore_list_destroy(servers);
for (i = 0; i 6; i++)
ecore_event_handler_del(handler[i]);
@@ -350,7 +357,7 @@
return NULL;
}
svr-data = (void *)data;
- servers = _ecore_list2_append(servers, svr);
+ ecore_list_append(servers, (void *)svr);
ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER);
return svr;
}
@@ -405,7 +412,7 @@
return NULL;
}
svr-data = (void *)data;
- servers = _ecore_list2_append(servers, svr);
+ ecore_list_append(servers, (void *)svr);
ECORE_MAGIC_SET(svr, ECORE_MAGIC_IPC_SERVER);
return svr;
}
@@ -419,7 +426,15 @@
void *
ecore_ipc_server_del(Ecore_Ipc_Server *svr)
{
- void *data;
+ ecore_list_goto(servers, (void *)svr);
+ return _ecore_ipc_server_del(ecore_list_remove(servers));
+}
+
+static void *
+_ecore_ipc_server_del(void *data)
+{
+ Ecore_Ipc_Server *svr;
+ svr = (Ecore_Ipc_Server *)data;
if (!ECORE_MAGIC_CHECK(svr, ECORE_MAGIC_IPC_SERVER))
{
@@ -429,9 +444,10 @@
}
ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE);
data = svr-data;
- while (svr-clients) ecore_ipc_client_del((Ecore_Ipc_Client *)svr-clients);
+ ecore_list_destroy(svr-clients);
+
ecore_con_server_del(svr-server);
- servers = _ecore_list2_remove(servers, svr);
+
if (svr-buf) free(svr-buf);
free(svr);
return data;
@@ -724,8 +740,17 @@
void *
ecore_ipc_client_del(Ecore_Ipc_Client *cl)
{
- void *data;
+ return _ecore_ipc_client_del((void *)cl);
+}
+
+static void *
+_ecore_ipc_client_del(void *data)
+{
+ Ecore_Ipc_Client *cl;
Ecore_Ipc_Server *svr;
+
+ cl = (Ecore_Ipc_Client *)data;
+ data = cl-data;
if (!ECORE_MAGIC_CHECK(cl, ECORE_MAGIC_IPC_CLIENT))
{
@@ -733,11 +758,12 @@
ecore_ipc_client_del);
return NULL;
}
+
ECORE_MAGIC_SET(cl, ECORE_MAGIC_NONE);
- data = cl-data;
svr = ecore_con_server_data_get(ecore_con_client_server_get(cl-client));
ecore_con_client_del(cl-client);
- svr-clients = _ecore_list2_remove(svr-clients, cl);
+ ecore_list_goto(svr-clients, (void *)cl);
+ ecore_list_remove(svr-clients);
if (cl-buf) free(cl-buf);
free(cl);
return data;
@@ -796,8 +822,8 @@
{
Ecore_Con_Event_Client_Add *e;
- e = ev;
- if (!_ecore_list2_find(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e-client return 1;
+ e = (Ecore_Con_Event_Client_Add *)ev;
+ if (!ecore_list_goto(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e-client return 1;
/* handling code here */
{
Ecore_Ipc_Client *cl;
@@ -809,7 +835,12 @@
ECORE_MAGIC_SET(cl, ECORE_MAGIC_IPC_CLIENT);
cl-client = e-client;
ecore_con_client_data_set(cl-client, (void *)cl);
- svr-clients = _ecore_list2_append(svr-clients, cl);
+ if (!svr-clients)
+ {
+svr-clients = ecore_list_new();
+ecore_list_set_free_cb(svr-clients,
ECORE_FREE_CB(_ecore_ipc_client_del));
+ }
+ ecore_list_append(svr-clients, (void *)cl);
{
Ecore_Ipc_Event_Client_Add *e2;
@@ -829,8 +860,8 @@
{
Ecore_Con_Event_Client_Del *e;
- e = ev;
- if (!_ecore_list2_find(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e-client return 1;
+ e = (Ecore_Con_Event_Client_Del *)ev;
+ if (!ecore_list_goto(servers,
ecore_con_server_data_get(ecore_con_client_server_get(e-client return 1;
/* handling code here */
{
Ecore_Ipc_Client *cl;
@@ -855,8 +886,8 @@
{
Ecore_Con_Event_Server_Add *e;
- e = ev;
- if (!_ecore_list2_find(servers, ecore_con_server_data_get(e-server)))
return 1;
+