Simon Poole wrote:
> Is there a reason why ecore_con still uses the deprecated list stuff?
> The ecore_list_nodes() function would be handy here.  I'll port it
> across to the new stuff if there's no obvious impediment to doing so.

Here's a patch against ecore-0.9.9.004 that just brings ecore_con onto
the new Ecore_List code.  It seems to work fine, but I'd appreciate
someone sanity checking it.

--
Simon Poole
www.appliancestudio.com
diff -urN ecore-0.9.9.004.orig/src/lib/ecore_con/ecore_con.c 
ecore-0.9.9.004/src/lib/ecore_con/ecore_con.c
--- ecore-0.9.9.004.orig/src/lib/ecore_con/ecore_con.c  2005-03-05 
02:32:20.000000000 +0000
+++ ecore-0.9.9.004/src/lib/ecore_con/ecore_con.c       2005-04-27 
14:02:24.507817856 +0100
@@ -46,7 +46,7 @@
 int ECORE_CON_EVENT_CLIENT_DATA = 0;
 int ECORE_CON_EVENT_SERVER_DATA = 0;
 
-static Ecore_Con_Server *servers = NULL;
+static Ecore_List *servers = NULL;
 static int init_count = 0;
 
 #define LENGTH_OF_SOCKADDR_UN(s) (strlen((s)->sun_path) + (size_t)(((struct 
sockaddr_un *)NULL)->sun_path))
@@ -82,6 +82,8 @@
        SSL_load_error_strings();
 #endif 
      }
+   if (!servers)
+      servers = ecore_list_new();
    return init_count;
 }
 
@@ -98,7 +100,10 @@
      {
        init_count--;
        if (init_count > 0) return init_count;
-       while (servers) _ecore_con_server_free(servers);
+       while (!ecore_list_is_empty(servers))
+            _ecore_con_server_free(ecore_list_remove_first(servers));
+       ecore_list_destroy(servers);
+       servers = NULL;
      }
    return 0;
 }
@@ -309,7 +314,8 @@
    svr->port = port;
    svr->data = (void *)data;
    svr->created = 1;
-   servers = _ecore_list_append(servers, svr);
+   svr->clients = ecore_list_new();
+   ecore_list_append(servers, svr);
    ECORE_MAGIC_SET(svr, ECORE_MAGIC_CON_SERVER);   
    return svr;
    
@@ -481,7 +487,8 @@
    svr->port = port;
    svr->data = (void *)data;
    svr->created = 0;
-   servers = _ecore_list_append(servers, svr);
+   svr->clients = ecore_list_new();
+   ecore_list_append(servers, svr);
    ECORE_MAGIC_SET(svr, ECORE_MAGIC_CON_SERVER);   
    return svr;
    
@@ -517,6 +524,7 @@
      }   
    data = svr->data;
    _ecore_con_server_free(svr);
+   if (ecore_list_goto(servers, svr)) ecore_list_remove(servers);
    return data;
 }
 
@@ -686,6 +694,7 @@
      }   
    data = cl->data;
    _ecore_con_client_free(cl);
+   if (ecore_list_goto(cl->server->clients, cl)) 
ecore_list_remove(cl->server->clients);
    return data;
 }
 
@@ -746,9 +755,9 @@
    ECORE_MAGIC_SET(svr, ECORE_MAGIC_NONE);   
    while ((svr->write_buf) && (!svr->dead)) _ecore_con_server_flush(svr);
    if (svr->write_buf) free(svr->write_buf);
-   servers = _ecore_list_remove(servers, svr);
-   while (svr->clients)
-     _ecore_con_client_free((Ecore_Con_Client *)svr->clients);
+   while (!ecore_list_is_empty(svr->clients))
+      _ecore_con_client_free(ecore_list_remove_first(svr->clients));
+   ecore_list_destroy(svr->clients);
    if ((svr->created) && (svr->path)) unlink(svr->path);
    if (svr->fd >= 0) close(svr->fd);
 #if USE_OPENSSL
@@ -771,7 +780,6 @@
    ECORE_MAGIC_SET(cl, ECORE_MAGIC_NONE);   
    while ((cl->buf) && (!cl->dead)) _ecore_con_client_flush(cl);
    if (cl->buf) free(cl->buf);
-   cl->server->clients = _ecore_list_remove(cl->server->clients, cl);
    if (cl->fd >= 0) close(cl->fd);
    if (cl->fd_handler) ecore_main_fd_handler_del(cl->fd_handler);
    free(cl);
@@ -809,7 +817,7 @@
                                                   _ecore_con_svr_cl_handler, 
                                                   cl, NULL, NULL);
        ECORE_MAGIC_SET(cl, ECORE_MAGIC_CON_CLIENT);
-       svr->clients = _ecore_list_append(svr->clients, cl);
+       ecore_list_append(svr->clients, cl);
          {
             Ecore_Con_Event_Client_Add *e;
             
diff -urN ecore-0.9.9.004.orig/src/lib/ecore_con/ecore_con_private.h 
ecore-0.9.9.004/src/lib/ecore_con/ecore_con_private.h
--- ecore-0.9.9.004.orig/src/lib/ecore_con/ecore_con_private.h  2004-10-22 
04:03:21.000000000 +0100
+++ ecore-0.9.9.004/src/lib/ecore_con/ecore_con_private.h       2005-04-27 
13:54:33.250459864 +0100
@@ -48,7 +48,7 @@
    char             *path;
    void             *data;
    Ecore_Fd_Handler *fd_handler;
-   Ecore_Con_Client *clients;
+   Ecore_List       *clients;
    int               write_buf_size;
    int               write_buf_offset;
    unsigned char    *write_buf;

Reply via email to