okay, I'm almost done with this now...

only thing that needs to be converted at this point is ecore_event...

I'll get on that later..

David; you might want to absorb the ecore_exe part of this patch into your current work :)

Cheers,
--
Morten
:wq
Index: ecore_events.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_events.c,v
retrieving revision 1.19
diff -u -r1.19 ecore_events.c
--- ecore_events.c      30 Aug 2005 10:05:26 -0000      1.19
+++ ecore_events.c      2 Jan 2006 11:49:19 -0000
@@ -471,7 +471,7 @@
    Ecore_Event_Exe_Exit *e;
    
    e = ev;
-   if (e->exe) _ecore_exe_free(e->exe);
+   if (e->exe) ecore_exe_del(e->exe);
    free(e);
 }
 #endif
Index: ecore_exe.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_exe.c,v
retrieving revision 1.28
diff -u -r1.28 ecore_exe.c
--- ecore_exe.c 30 Dec 2005 19:28:54 -0000      1.28
+++ ecore_exe.c 2 Jan 2006 11:49:19 -0000
@@ -1,5 +1,6 @@
 #include "ecore_private.h"
 #include "Ecore.h"
+#include "Ecore_Data.h"
 
 #include <errno.h>
 #include <sys/wait.h>
@@ -12,9 +13,10 @@
 static void _ecore_exe_flush(Ecore_Exe *exe);
 static void _ecore_exe_event_exe_data_free(void *data __UNUSED__, void *ev);
 
-static Ecore_Exe *exes = NULL;
+static Ecore_List *exes = NULL;
 static char *shell = NULL;
 
+static void _ecore_exe_free(void *data);
 
 /* FIXME: This errno checking stuff should be put elsewhere for everybody to 
use.
  * For now it lives here though, just to make testing easier.
@@ -196,10 +198,17 @@
             return NULL;
          }
        ECORE_MAGIC_SET(exe, ECORE_MAGIC_EXE);
+
+       if(!exes)
+          {
+            exes = ecore_list_new();
+            ecore_list_set_free_cb(exes, ECORE_FREE_CB(_ecore_exe_free));
+          }
+
        exe->pid = pid;
        exe->data = (void *)data;
         exe->cmd = strdup(exe_cmd);
-       exes = _ecore_list2_append(exes, exe);
+       ecore_list_append(exes, (void *)exe);
        return exe;
      }
    _ecore_exe_exec_it(exe_cmd);
@@ -379,7 +388,7 @@
                                          }
                                    }
 
-                                exes = _ecore_list2_append(exes, exe);
+                                ecore_list_append(exes, (void *)exe);
                                  n = 0;
                              }
                           else
@@ -393,7 +402,12 @@
 
    if (!ok)
       {   /* Something went wrong, so pull down everything. */
-         IF_FN_DEL(_ecore_exe_free, exe);
+        Ecore_Exe *e;
+        e = ecore_list_goto(exes, (void *)exe);
+       if(e)
+           ecore_list_remove_destroy(exes);
+       else
+          _ecore_exe_free((void *)exe);
       }
    else
       printf("Running as %d for %s.\n", exe->pid, exe->cmd);
@@ -506,15 +520,22 @@
  * @ingroup Ecore_Exe_Basic_Group
  */
 void *
-ecore_exe_free(Ecore_Exe *exe)
+ecore_exe_del(Ecore_Exe *exe)
 {
+   void *ret = NULL;
+
    if (!ECORE_MAGIC_CHECK(exe, ECORE_MAGIC_EXE))
      {
        ECORE_MAGIC_FAIL(exe, ECORE_MAGIC_EXE,
-                        "ecore_exe_free");
+                        "ecore_exe_del");
        return NULL;
      }
-   return _ecore_exe_free(exe);
+
+   ecore_list_goto(exes, (void *)exe);
+   ret = ((Ecore_Exe *)ecore_list_current(exes))->data;
+   ecore_list_remove_destroy(exes);
+
+   return ret;
 }
 
 /**
@@ -670,19 +691,18 @@
 void
 _ecore_exe_shutdown(void)
 {
-   while (exes) _ecore_exe_free(exes);
+   if (exes) ecore_list_destroy(exes);
 }
 
 Ecore_Exe *
 _ecore_exe_find(pid_t pid)
 {
-   Ecore_List2 *l;
+   Ecore_Exe *exe;
    
-   for (l = (Ecore_List2 *)exes; l; l = l->next)
+   for (exe = (Ecore_Exe *)ecore_list_goto_first(exes);
+        exe;
+        exe = (Ecore_Exe *)ecore_list_next(exes))
      {
-       Ecore_Exe *exe;
-       
-       exe = (Ecore_Exe *)l;
        if (exe->pid == pid) return exe;
      }
    return NULL;
@@ -773,13 +793,14 @@
    return;
 }
 
-void *
-_ecore_exe_free(Ecore_Exe *exe)
+static void
+_ecore_exe_free(void *data)
 {
-   void *data;
+   Ecore_Exe *exe;
    int ok = 0;
    int result;
 
+   exe = (Ecore_Exe *)data;
    data = exe->data;
 
    IF_FN_DEL(ecore_main_fd_handler_del, exe->write_fd_handler);
@@ -790,11 +811,9 @@
    IF_FREE(exe->read_data_buf);
    IF_FREE(exe->cmd);
    
-   exes = _ecore_list2_remove(exes, exe);
    ECORE_MAGIC_SET(exe, ECORE_MAGIC_NONE);
    IF_FREE(exe->tag);
    free(exe);
-   return data;
 }
 
 
Index: ecore_idle_enterer.c
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_idle_enterer.c,v
retrieving revision 1.6
diff -u -r1.6 ecore_idle_enterer.c
--- ecore_idle_enterer.c        30 Aug 2005 10:05:26 -0000      1.6
+++ ecore_idle_enterer.c        2 Jan 2006 11:49:19 -0000
@@ -1,8 +1,11 @@
 #include "ecore_private.h"
 #include "Ecore.h"
+#include "Ecore_Data.h"
 
-static Ecore_Idle_Enterer *idle_enterers = NULL;
-static int                 idle_enterers_delete_me = 0;
+static Ecore_List *idle_enterers = NULL;
+static int         idle_enterers_delete_me = 0;
+
+static void _ecore_idle_enterer_free(void *data);
 
 /**
  * Add an idle enterer handler.
@@ -21,9 +24,16 @@
    ie = calloc(1, sizeof(Ecore_Idle_Enterer));
    if (!ie) return NULL;
    ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_ENTERER);
+
+   if(!idle_enterers)
+     {
+       idle_enterers = ecore_list_new();
+       ecore_list_set_free_cb(idle_enterers, 
ECORE_FREE_CB(_ecore_idle_enterer_free));
+     }
+
    ie->func = func;
    ie->data = (void *)data;
-   idle_enterers = _ecore_list2_append(idle_enterers, ie);
+   ecore_list_append(idle_enterers, (void *)ie);
    return ie;
 }
 
@@ -51,48 +61,47 @@
 void
 _ecore_idle_enterer_shutdown(void)
 {
-   while (idle_enterers)
-     {
-       Ecore_Idle_Enterer *ie;
-       
-       ie = idle_enterers;
-       idle_enterers = _ecore_list2_remove(idle_enterers, ie);
-       ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
-       free(ie);
-     }
+   if(idle_enterers)
+     ecore_list_destroy(idle_enterers);
+   idle_enterers = NULL;
    idle_enterers_delete_me = 0;
 }
 
+static void
+_ecore_idle_enterer_free(void *data)
+{
+   ECORE_MAGIC_SET((Ecore_Idle_Enterer *)data, ECORE_MAGIC_NONE);
+   free((Ecore_Idle_Enterer *)data);
+}
+
 void
 _ecore_idle_enterer_call(void)
 {
-   Ecore_List2 *l;
+   Ecore_Idle_Enterer *ie;
+
+   if(!idle_enterers)
+     return;
    
-   for (l = (Ecore_List2 *)idle_enterers; l; l = l->next)
+   for (ie = (Ecore_Idle_Enterer *)ecore_list_goto_first(idle_enterers);
+        ie;
+        ie = (Ecore_Idle_Enterer *)ecore_list_next(idle_enterers))
      {
-       Ecore_Idle_Enterer *ie;
-       
-       ie = (Ecore_Idle_Enterer *)l;
-       if (!ie->delete_me)
-         {
-            if (!ie->func(ie->data)) ecore_idle_enterer_del(ie);
-         }
+       if (!ie->delete_me && !ie->func(ie->data))
+          ecore_idle_enterer_del(ie);
      }
+
    if (idle_enterers_delete_me)
      {
-       for (l = (Ecore_List2 *)idle_enterers; l;)
-         {
-            Ecore_Idle_Enterer *ie;
-            
-            ie = (Ecore_Idle_Enterer *)l;
-            l = l->next;
+       for (ie = (Ecore_Idle_Enterer *)ecore_list_goto_first(idle_enterers); 
ie;)
+          {
             if (ie->delete_me)
-              {
-                 idle_enterers = _ecore_list2_remove(idle_enterers, ie);
-                 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
-                 free(ie);
-              }
-         }
+               {
+                  ecore_list_remove_destroy(idle_enterers);
+                  ie = (Ecore_Idle_Enterer *)ecore_list_current(idle_enterers);
+               }
+            else
+               ie = (Ecore_Idle_Enterer *)ecore_list_next(idle_enterers);
+          }
        idle_enterers_delete_me = 0;
      }
 }
@@ -100,6 +109,6 @@
 int
 _ecore_idle_enterer_exist(void)
 {
-   if (idle_enterers) return 1;
+   if (idle_enterers && ecore_list_nodes(idle_enterers)) return 1;
    return 0;
 }
Index: ecore_idle_exiter.c
===================================================================
RCS file: 
/cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_idle_exiter.c,v
retrieving revision 1.4
diff -u -r1.4 ecore_idle_exiter.c
--- ecore_idle_exiter.c 30 Aug 2005 10:05:26 -0000      1.4
+++ ecore_idle_exiter.c 2 Jan 2006 11:49:19 -0000
@@ -1,8 +1,11 @@
 #include "ecore_private.h"
 #include "Ecore.h"
+#include "Ecore_Data.h"
 
-static Ecore_Idle_Exiter *idle_exiters = NULL;
-static int                 idle_exiters_delete_me = 0;
+static Ecore_List *idle_exiters = NULL;
+static int         idle_exiters_delete_me = 0;
+
+static void _ecore_idle_exiter_free(void *data);
 
 /**
  * Add an idle exiter handler.
@@ -20,9 +23,17 @@
    ie = calloc(1, sizeof(Ecore_Idle_Exiter));
    if (!ie) return NULL;
    ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLE_EXITER);
+
+   if(!idle_exiters)
+     {
+       idle_exiters = ecore_list_new();
+       if(!idle_exiters) return NULL;
+       ecore_list_set_free_cb(idle_exiters, 
ECORE_FREE_CB(_ecore_idle_exiter_free));
+     }
+
    ie->func = func;
    ie->data = (void *)data;
-   idle_exiters = _ecore_list2_append(idle_exiters, ie);
+   ecore_list_append(idle_exiters, (void *)ie);
    return ie;
 }
 
@@ -47,50 +58,49 @@
    return idle_exiter->data;
 }
 
+static void
+_ecore_idle_exiter_free(void *data)
+{
+   ECORE_MAGIC_SET((Ecore_Idle_Exiter *)data, ECORE_MAGIC_NONE);
+   free((Ecore_Idle_Exiter *)data);
+}
+
 void
 _ecore_idle_exiter_shutdown(void)
 {
-   while (idle_exiters)
-     {
-       Ecore_Idle_Exiter *ie;
-       
-       ie = idle_exiters;
-       idle_exiters = _ecore_list2_remove(idle_exiters, ie);
-       ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
-       free(ie);
-     }
+   if(idle_exiters)
+     ecore_list_destroy(idle_exiters);
+   idle_exiters = NULL;
    idle_exiters_delete_me = 0;
 }
 
 void
 _ecore_idle_exiter_call(void)
 {
-   Ecore_List2 *l;
+   Ecore_Idle_Exiter *ie;
+
+   if(!idle_exiters)
+     return;
    
-   for (l = (Ecore_List2 *)idle_exiters; l; l = l->next)
+   for (ie = (Ecore_Idle_Exiter *)ecore_list_goto_first(idle_exiters);
+        ie;
+        ie = (Ecore_Idle_Exiter *)ecore_list_next(idle_exiters))
      {
-       Ecore_Idle_Exiter *ie;
-       
-       ie = (Ecore_Idle_Exiter *)l;
-       if (!ie->delete_me)
-         {
-            if (!ie->func(ie->data)) ecore_idle_exiter_del(ie);
-         }
+       if (!ie->delete_me && !ie->func(ie->data))
+          ecore_idle_exiter_del(ie);
      }
+
    if (idle_exiters_delete_me)
      {
-       for (l = (Ecore_List2 *)idle_exiters; l;)
+       for (ie = (Ecore_Idle_Exiter *)ecore_list_goto_first(idle_exiters); ie;)
          {
-            Ecore_Idle_Exiter *ie;
-            
-            ie = (Ecore_Idle_Exiter *)l;
-            l = l->next;
             if (ie->delete_me)
-              {
-                 idle_exiters = _ecore_list2_remove(idle_exiters, ie);
-                 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
-                 free(ie);
-              }
+               {
+                  ecore_list_remove_destroy(idle_exiters);
+                  ie = (Ecore_Idle_Exiter *)ecore_list_current(idle_exiters);
+               }
+            else
+               ie = (Ecore_Idle_Exiter *)ecore_list_next(idle_exiters);
          }
        idle_exiters_delete_me = 0;
      }
@@ -99,6 +109,6 @@
 int
 _ecore_idle_exiter_exist(void)
 {
-   if (idle_exiters) return 1;
+   if (idle_exiters && ecore_list_nodes(idle_exiters)) return 1;
    return 0;
 }
Index: ecore_idler.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_idler.c,v
retrieving revision 1.6
diff -u -r1.6 ecore_idler.c
--- ecore_idler.c       30 Aug 2005 10:05:26 -0000      1.6
+++ ecore_idler.c       2 Jan 2006 11:49:19 -0000
@@ -1,8 +1,11 @@
 #include "ecore_private.h"
 #include "Ecore.h"
+#include "Ecore_Data.h"
 
-static Ecore_Idler *idlers = NULL;
-static int          idlers_delete_me = 0;
+static Ecore_List *idlers = NULL;
+static int         idlers_delete_me = 0;
+
+static void _ecore_idler_free(void *data);
 
 /**
  * Add an idler handler.
@@ -20,9 +23,16 @@
    ie = calloc(1, sizeof(Ecore_Idler));
    if (!ie) return NULL;
    ECORE_MAGIC_SET(ie, ECORE_MAGIC_IDLER);
+
+   if (!idlers)
+     {
+       idlers = ecore_list_new();
+       ecore_list_set_free_cb(idlers, ECORE_FREE_CB(_ecore_idler_free));
+     }
+
    ie->func = func;
    ie->data = (void *)data;
-   idlers = _ecore_list2_append(idlers, ie);
+   ecore_list_append(idlers, (void *)ie);
    return ie;
 }
 
@@ -47,51 +57,50 @@
    return idler->data;
 }
 
+static void
+_ecore_idler_free(void *data)
+{
+   ECORE_MAGIC_SET((Ecore_Idler *)data, ECORE_MAGIC_NONE);
+   free((Ecore_Idler *)data);
+}
+
 void
 _ecore_idler_shutdown(void)
 {
-   while (idlers)
-     {
-       Ecore_Idler *ie;
-       
-       ie = idlers;
-       idlers = _ecore_list2_remove(idlers, ie);
-       ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
-       free(ie);
-     }
+   if(idlers)
+     ecore_list_destroy(idlers);
+   idlers = NULL;
    idlers_delete_me = 0;
 }
 
 int
 _ecore_idler_call(void)
 {
-   Ecore_List2 *l;
+   Ecore_Idler *ie;
 
-   for (l = (Ecore_List2 *)idlers; l; l = l->next)
+   if(!idlers)
+     return 0;
+
+   for (ie = (Ecore_Idler *)ecore_list_goto_first(idlers);
+        ie;
+        ie = (Ecore_Idler *)ecore_list_next(idlers))
      {
-       Ecore_Idler *ie;
-       
-       ie = (Ecore_Idler *)l;
-       if (!ie->delete_me)
-         {
-            if (!ie->func(ie->data)) ecore_idler_del(ie);
-         }
+       if (!ie->delete_me && !ie->func(ie->data))
+          ecore_idler_del(ie);
      }
+
    if (idlers_delete_me)
      {
-       for (l = (Ecore_List2 *)idlers; l;)
-         {
-            Ecore_Idler *ie;
-            
-            ie = (Ecore_Idler *)l;
-            l = l->next;
+       for (ie = (Ecore_Idler *)ecore_list_goto_first(idlers); ie;)
+          {
             if (ie->delete_me)
-              {
-                 idlers = _ecore_list2_remove(idlers, ie);
-                 ECORE_MAGIC_SET(ie, ECORE_MAGIC_NONE);
-                 free(ie);
-              }
-         }
+               {
+                  ecore_list_remove_destroy(idlers);
+                  ie = (Ecore_Idler *)ecore_list_current(idlers);
+               }
+            else
+               ie = (Ecore_Idler *)ecore_list_next(idlers);
+          }
        idlers_delete_me = 0;
      }
    if (idlers) return 1;
@@ -101,6 +110,6 @@
 int
 _ecore_idler_exist(void)
 {
-   if (idlers) return 1;
+   if (idlers && ecore_list_nodes(idlers)) return 1;
    return 0;
 }
Index: ecore_list.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_list.c,v
retrieving revision 1.20
diff -u -r1.20 ecore_list.c
--- ecore_list.c        6 Sep 2005 21:00:55 -0000       1.20
+++ ecore_list.c        2 Jan 2006 11:49:19 -0000
@@ -57,104 +57,6 @@
 }
 
 void *
-_ecore_list2_prepend(void *in_list, void *in_item)
-{
-   Ecore_List2 *new_l;
-   Ecore_List2 *list, *item;
-   
-   list = in_list;
-   item = in_item;   
-   new_l = item;
-   new_l->prev = NULL;
-   if (!list) 
-     {
-       new_l->next = NULL;
-       new_l->last = new_l;    
-       return new_l;
-     }
-   new_l->next = list;
-   list->prev = new_l;
-   new_l->last = list->last;
-   list->last = NULL;
-   return new_l;
-}
-
-void *
-_ecore_list2_append_relative(void *in_list, void *in_item, void *in_relative)
-{
-   Ecore_List2 *l;
-   Ecore_List2 *list, *item, *relative;
-   
-   list = in_list;
-   item = in_item;
-   relative = in_relative;
-   for (l = list; l; l = l->next)
-     {
-       if (l == relative)
-         {
-            Ecore_List2 *new_l;
-            
-            new_l = item;
-            if (l->next)
-              {
-                 new_l->next = l->next;
-                 l->next->prev = new_l;
-              }
-
-            else new_l->next = NULL;
-            l->next = new_l;
-            new_l->prev = l;
-            if (!new_l->next)
-              list->last = new_l;
-            return list;
-         }
-     }
-   return _ecore_list2_append(list, item);
-}
-
-void *
-_ecore_list2_prepend_relative(void *in_list, void *in_item, void *in_relative)
-{
-   Ecore_List2 *l;
-   Ecore_List2 *list, *item, *relative;
-   
-   list = in_list;
-   item = in_item;
-   relative = in_relative;
-   for (l = list; l; l = l->next)
-     {
-       if (l == relative)
-         {
-            Ecore_List2 *new_l;
-            
-            new_l = item;
-            new_l->prev = l->prev;
-            new_l->next = l;
-            l->prev = new_l;
-            if (new_l->prev)
-              {
-                 new_l->prev->next = new_l;
-                 if (!new_l->next)
-                   list->last = new_l;
-                 return list;
-              }
-            else
-              {
-                 if (!new_l->next)
-                   new_l->last = new_l;
-                 else
-                   {
-                      new_l->last = list->last;
-                      list->last = NULL;
-                   }
-                 return new_l;
-              }
-         }
-     }
-   return _ecore_list2_prepend(list, item);
-}
-
-void *
 _ecore_list2_remove(void *in_list, void *in_item)
 {
    Ecore_List2 *return_l;
@@ -186,21 +88,6 @@
    item->prev = NULL;
    return return_l;
 }
-
-void *
-_ecore_list2_find(void *in_list, void *in_item)
-{
-   Ecore_List2 *l;
-   Ecore_List2 *list, *item;
-   
-   list = in_list;
-   item = in_item;   
-   for (l = list; l; l = l->next)
-     {
-       if (l == item) return item;
-     }
-   return NULL;
-}
 /* XXX: End deprecated code */
 
 /**
@@ -711,6 +598,9 @@
        if (index > ecore_list_nodes(list) || index < 0)
                return NULL;
 
+       if (index == list->index)
+               return list->current->data;
+
        _ecore_list_goto_first(list);
 
        for (i = 0; i < index && _ecore_list_next(list); i++);
Index: ecore_main.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_main.c,v
retrieving revision 1.21
diff -u -r1.21 ecore_main.c
--- ecore_main.c        19 Dec 2005 01:36:55 -0000      1.21
+++ ecore_main.c        2 Jan 2006 11:49:19 -0000
@@ -1,5 +1,6 @@
 #include "ecore_private.h"
 #include "Ecore.h"
+#include "Ecore_Data.h"
 
 #ifdef WIN32
 #include <winsock.h>
@@ -25,14 +26,15 @@
 static void _ecore_main_fd_handlers_call(void);
 static int  _ecore_main_fd_handlers_buf_call(void);
 static void _ecore_main_loop_iterate_internal(int once_only);
+static void _ecore_main_fd_free(void *data);
 
-static int               in_main_loop = 0;
-static int               do_quit = 0;
-static Ecore_Fd_Handler *fd_handlers = NULL;
-static int               fd_handlers_delete_me = 0;
+static int         in_main_loop = 0;
+static int         do_quit = 0;
+static Ecore_List *fd_handlers = NULL;
+static int         fd_handlers_delete_me = 0;
 
-static double            t1 = 0.0;
-static double            t2 = 0.0;
+static double      t1 = 0.0;
+static double      t2 = 0.0;
 
 /**
  * @defgroup Ecore_Main_Loop_Group Main Loop Functions
@@ -140,6 +142,13 @@
    fdh = calloc(1, sizeof(Ecore_Fd_Handler));
    if (!fdh) return NULL;
    ECORE_MAGIC_SET(fdh, ECORE_MAGIC_FD_HANDLER);
+
+   if(!fd_handlers)
+     {
+       fd_handlers = ecore_list_new();
+       ecore_list_set_free_cb(fd_handlers, ECORE_FREE_CB(_ecore_main_fd_free));
+     }
+
    fdh->fd = fd;
    fdh->flags = flags;
    fdh->read_active = 0;
@@ -150,7 +159,7 @@
    fdh->data = (void *)data;
    fdh->buf_func = buf_func;
    fdh->buf_data = (void *)buf_data;
-   fd_handlers = _ecore_list2_append(fd_handlers, fdh);
+   ecore_list_append(fd_handlers, fdh);
    return fdh;
 }
 
@@ -262,18 +271,17 @@
                "***                 Program may crash or behave strangely 
now.\n");
        return;
      }
-   while (fd_handlers)
-     {
-       Ecore_Fd_Handler *fdh;
-       
-       fdh = fd_handlers;
-       fd_handlers = _ecore_list2_remove(fd_handlers, fdh);
-       ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
-       free(fdh);
-     }
+   ecore_list_destroy(fd_handlers);
    fd_handlers_delete_me = 0;
 }
 
+void
+_ecore_main_fd_free(void *data)
+{
+   ECORE_MAGIC_SET((Ecore_Fd_Handler *)data, ECORE_MAGIC_NONE);
+   free((Ecore_Fd_Handler *)data);
+}
+
 static int
 _ecore_main_select(double timeout)
 {
@@ -281,7 +289,9 @@
    fd_set         rfds, wfds, exfds;
    int            max_fd;
    int            ret;
-   Ecore_List2    *l;
+
+   if(!fd_handlers)
+     return 0;
 
    t = NULL;
    if (timeout > 0.0)
@@ -312,20 +322,19 @@
    FD_ZERO(&exfds);
 
    /* call the prepare callback for all handlers */
-   for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+   Ecore_Fd_Handler *fdh;
+   for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+        fdh;
+        fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
      {
-       Ecore_Fd_Handler *fdh;
-       
-       fdh = (Ecore_Fd_Handler *)l;
-
        if (!fdh->delete_me && fdh->prep_func)
-               fdh->prep_func (fdh->prep_data, fdh);
+          fdh->prep_func (fdh->prep_data, fdh);
      }
-   for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+
+   for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+        fdh;
+        fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
      {
-       Ecore_Fd_Handler *fdh;
-       
-       fdh = (Ecore_Fd_Handler *)l;
        if (fdh->flags & ECORE_FD_READ)
          {
             FD_SET(fdh->fd, &rfds);
@@ -352,11 +361,10 @@
      }
    if (ret > 0)
      {
-       for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+       for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+            fdh;
+            fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
          {
-            Ecore_Fd_Handler *fdh;
-            
-            fdh = (Ecore_Fd_Handler *)l;
             if (!fdh->delete_me)
               {
                  if (FD_ISSET(fdh->fd, &rfds))
@@ -376,21 +384,21 @@
 static void
 _ecore_main_fd_handlers_cleanup(void)
 {
-   Ecore_List2 *l;
-   
    if (!fd_handlers_delete_me) return;
-   for (l = (Ecore_List2 *)fd_handlers; l;)
+
+   Ecore_Fd_Handler *fdh;
+
+   for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+        fdh;)
      {
-       Ecore_Fd_Handler *fdh;
        
-       fdh = (Ecore_Fd_Handler *)l;
-       l = l->next;
        if (fdh->delete_me)
-         {
-            fd_handlers = _ecore_list2_remove(fd_handlers, fdh);
-            ECORE_MAGIC_SET(fdh, ECORE_MAGIC_NONE);
-            free(fdh);
-         }
+          {
+            ecore_list_remove(fd_handlers);
+            fdh = (Ecore_Fd_Handler *)ecore_list_current(fd_handlers);
+          }
+       else
+          fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers);
      }
    fd_handlers_delete_me = 0;
 }
@@ -398,13 +406,11 @@
 static void
 _ecore_main_fd_handlers_call(void)
 {
-   Ecore_List2    *l;
-   
-   for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+   Ecore_Fd_Handler *fdh;
+   for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+        fdh;
+        fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
      {
-       Ecore_Fd_Handler *fdh;
-       
-       fdh = (Ecore_Fd_Handler *)l;
        if (!fdh->delete_me)
          {
             if ((fdh->read_active) || 
@@ -427,15 +433,14 @@
 static int
 _ecore_main_fd_handlers_buf_call(void)
 {
-   Ecore_List2    *l;
+   Ecore_Fd_Handler *fdh;
    int ret;
    
    ret = 0;
-   for (l = (Ecore_List2 *)fd_handlers; l; l = l->next)
+   for (fdh = (Ecore_Fd_Handler *)ecore_list_goto_first(fd_handlers);
+        fdh;
+        fdh = (Ecore_Fd_Handler *)ecore_list_next(fd_handlers))
      {
-       Ecore_Fd_Handler *fdh;
-       
-       fdh = (Ecore_Fd_Handler *)l;
        if (!fdh->delete_me)
          {
             if (fdh->buf_func)
@@ -503,7 +508,7 @@
 
    /* if these calls caused any biuffered events to appear - deal with them */
    while (_ecore_main_fd_handlers_buf_call());
-   /* if ther are any - jump to processing them */
+   /* if there are any - jump to processing them */
    if (_ecore_event_exist())
      {
        int ret;
Index: ecore_private.h
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_private.h,v
retrieving revision 1.29
diff -u -r1.29 ecore_private.h
--- ecore_private.h     30 Dec 2005 19:17:21 -0000      1.29
+++ ecore_private.h     2 Jan 2006 11:49:19 -0000
@@ -197,7 +197,6 @@
 
 struct _Ecore_Timer
 {
-   Ecore_List2   __list_data;
    ECORE_MAGIC;
    double       in;
    double       at;
@@ -209,7 +208,6 @@
 
 struct _Ecore_Idler
 {
-   Ecore_List2   __list_data;
    ECORE_MAGIC;
    int          delete_me : 1;
    int        (*func) (void *data);   
@@ -218,7 +216,6 @@
 
 struct _Ecore_Idle_Enterer
 {
-   Ecore_List2   __list_data;
    ECORE_MAGIC;
    int          delete_me : 1;
    int        (*func) (void *data);   
@@ -227,7 +224,6 @@
 
 struct _Ecore_Idle_Exiter
 {
-   Ecore_List2   __list_data;
    ECORE_MAGIC;
    int          delete_me : 1;
    int        (*func) (void *data);   
@@ -287,7 +283,6 @@
 
 struct _Ecore_Animator
 {
-   Ecore_List2   __list_data;
    ECORE_MAGIC;
    signed char  delete_me : 1;
    int        (*func) (void *data);
@@ -342,18 +337,14 @@
 #ifndef WIN32
 void          _ecore_exe_shutdown(void);
 Ecore_Exe    *_ecore_exe_find(pid_t pid);
-void         *_ecore_exe_free(Ecore_Exe *exe);
+void         *_ecore_exe_del(Ecore_Exe *exe);
 #endif
 
 void          _ecore_animator_shutdown(void);
     
 
 EAPI void         *_ecore_list2_append           (void *in_list, void 
*in_item);
-EAPI void         *_ecore_list2_prepend          (void *in_list, void 
*in_item);
-EAPI void         *_ecore_list2_append_relative  (void *in_list, void 
*in_item, void *in_relative);
-EAPI void         *_ecore_list2_prepend_relative (void *in_list, void 
*in_item, void *in_relative);
 EAPI void         *_ecore_list2_remove           (void *in_list, void 
*in_item);
-EAPI void         *_ecore_list2_find             (void *in_list, void 
*in_item);
 
 void          _ecore_fps_debug_init(void);
 void          _ecore_fps_debug_shutdown(void);
Index: ecore_timer.c
===================================================================
RCS file: /cvsroot/enlightenment/e17/libs/ecore/src/lib/ecore/ecore_timer.c,v
retrieving revision 1.14
diff -u -r1.14 ecore_timer.c
--- ecore_timer.c       11 Dec 2005 14:33:21 -0000      1.14
+++ ecore_timer.c       2 Jan 2006 11:49:19 -0000
@@ -1,11 +1,13 @@
 #include "ecore_private.h"
 #include "Ecore.h"
+#include "Ecore_Data.h"
 
-static void _ecore_timer_set(Ecore_Timer *timer, double at, double in, int 
(*func) (void *data), void *data);
+static void  _ecore_timer_set(Ecore_Timer *timer, double at, double in, int 
(*func) (void *data), void *data);
+static void *_ecore_timer_del(void *t);
 
 static int          timers_added = 0;
 static int          timers_delete_me = 0;
-static Ecore_Timer *timers = NULL;
+static Ecore_DList *timers = NULL;
 static double       last_check = 0.0;
 
 /**
@@ -83,36 +85,33 @@
 }
 
 void
+_ecore_timer_init(void)
+{
+   timers = ecore_dlist_new();
+   ecore_dlist_set_free_cb(timers, ECORE_FREE_CB(free));
+}
+
+void
 _ecore_timer_shutdown(void)
 {
-   while (timers)
-     {
-       Ecore_Timer *timer;
-       
-       timer = timers;
-       timers = _ecore_list2_remove(timers, timer);
-       ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
-       free(timer);
-     }
+   if(timers)
+     ecore_dlist_destroy(timers);
 }
 
 void
 _ecore_timer_cleanup(void)
 {
-   Ecore_List2 *l;
-
    if (!timers_delete_me) return;
-   for (l = (Ecore_List2 *)timers; l;)
+
+   Ecore_Timer *timer;
+
+   for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers); 
+        timer;
+        timer = (Ecore_Timer *)ecore_dlist_next(timers))
      {
-       Ecore_Timer *timer;
-       
-       timer = (Ecore_Timer *)l;
-       l = l->next;
        if (timer->delete_me)
          {
-            timers = _ecore_list2_remove(timers, timer);
-            ECORE_MAGIC_SET(timer, ECORE_MAGIC_NONE);
-            free(timer);
+            ecore_dlist_remove_destroy(timers);
             timers_delete_me--;
             if (timers_delete_me == 0) return;
          }
@@ -123,15 +122,13 @@
 void
 _ecore_timer_enable_new(void)
 {
-   Ecore_List2 *l;   
-
    if (!timers_added) return;
    timers_added = 0;
-   for (l = (Ecore_List2 *)timers; l; l = l->next)
+   Ecore_Timer *timer;
+   for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers); 
+        timer;
+        timer = (Ecore_Timer *)ecore_dlist_next(timers))
      {
-       Ecore_Timer *timer;
-       
-       timer = (Ecore_Timer *)l;
        timer->just_added = 0;
      }
 }
@@ -142,9 +139,9 @@
    double now;
    double in;
    
-   if (!timers) return -1;
+   if (!ecore_dlist_goto_first(timers)) return -1;
    now = ecore_time_get();
-   in = timers->at - now;
+   in = ((Ecore_Timer *)ecore_dlist_current(timers))->at - now;
    if (in < 0) in = 0;
    return in;
 }  
@@ -152,28 +149,29 @@
 int
 _ecore_timer_call(double when)
 {
-   Ecore_List2 *l;   
    Ecore_Timer *timer;
    
-   if (!timers) return 0;
+   if (!ecore_dlist_nodes(timers)) return 0;
    if (last_check > when)
      {
        /* User set time backwards */
-       for (l = (Ecore_List2 *)timers; l; l = l->next)
+       for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers); 
+            timer;
+            timer = (Ecore_Timer *)ecore_dlist_next(timers))
          {
-            timer = (Ecore_Timer *)l;
             timer->at -= (last_check - when);
          }
      }
    last_check = when;
-   for (l = (Ecore_List2 *)timers; l; l = l->next)
+   for (timer = (Ecore_Timer *)ecore_dlist_goto_first(timers); 
+        timer;
+        timer = (Ecore_Timer *)ecore_dlist_next(timers))
      {
-       timer = (Ecore_Timer *)l;
        if ((timer->at <= when) &&
            (!timer->just_added) &&
            (!timer->delete_me))
          {
-            timers = _ecore_list2_remove(timers, timer);
+            ecore_dlist_remove(timers);
             _ecore_timer_call(when);
             if ((!timer->delete_me) && (timer->func(timer->data)))
               {
@@ -202,27 +200,26 @@
 static void
 _ecore_timer_set(Ecore_Timer *timer, double at, double in, int (*func) (void 
*data), void *data)
 {
-   Ecore_List2 *l;
-   
    timers_added = 1;
    timer->at = at;
    timer->in = in;
    timer->func = func;
    timer->data = data;
    timer->just_added = 1;
-   if (timers)
+   if (!timers) _ecore_timer_init();
      {
-       for (l = ((Ecore_List2 *)(timers))->last; l; l = l->prev)
-         {
-            Ecore_Timer *t2;
-            
-            t2 = (Ecore_Timer *)l;
+       Ecore_Timer *t2;
+       for (t2 = (Ecore_Timer *)ecore_dlist_goto_last(timers); 
+             t2;
+             t2 = (Ecore_Timer *)ecore_dlist_previous(timers))
+          {
             if (timer->at > t2->at)
-              {
-                 timers = _ecore_list2_append_relative(timers, timer, t2);
+               {
+                  ecore_dlist_previous(timers);
+                  ecore_dlist_insert(timers, (void *)timer);
                  return;
-              }
-         }
+               }
+          }
      }
-   timers = _ecore_list2_prepend(timers, timer);
+   ecore_dlist_prepend(timers, (void *)timer);
 }

Reply via email to