diff -urN cui96/cui.c cui97/cui.c --- cui96/cui.c Tue Apr 1 23:00:00 2014 +++ cui97/cui.c Wed Apr 2 01:20:00 2014 @@ -8,6 +8,7 @@ #include "label.h" #include "button.h" #include "timer.h" +#include "list.h" #include #include #include @@ -452,44 +453,44 @@ return FD_ISSET(fd, &res_rfs); } -typedef struct cui_readable_list *cui_readable_list; - -struct cui_readable_list{ +typedef struct cui_readable{ cui obj; int fd; - cui_readable_list next; -}; +} *cui_readable; -cui_readable_list readable_list = NULL; +static cui_list readable_list = NULL; static void cui_readable_select_setup(void) { - cui_readable_list p = readable_list; + cui_list lp = readable_list; cui_select_init(); - for(; p; p=p->next) cui_select_add(p->fd); + for(; lp; lp=lp->next){ + cui_readable p = (cui_readable)lp->data; + cui_select_add(p->fd); + } } void cui_readable_add(cui obj, int fd) { - cui_readable_list p; - if((p = malloc(sizeof(struct cui_readable_list))) == NULL) ERR("No Mem"); + cui_readable p = cui_list_add(&readable_list, sizeof(struct cui_readable)); p->obj = obj; p->fd = fd; - p->next = readable_list; - readable_list = p; cui_readable_select_setup(); } void cui_readable_del(cui obj, int fd) { - cui_readable_list p = readable_list, *prev = &readable_list; - for(; p; prev=&p->next, p=p->next) if(p->obj == obj && p->fd == fd) break; - if(p == NULL) return; - *prev = p->next; - free(p); + cui_list lp = readable_list; + cui_readable p; + for(; lp; lp=lp->next){ + p = (cui_readable)lp->data; + if(p->obj == obj && p->fd == fd) break; + } + if(lp == NULL) return; + cui_list_del(&readable_list, p); cui_readable_select_setup(); } @@ -503,8 +504,9 @@ static void cui_readable_work(void) { - cui_readable_list p = readable_list; - for(; p; p=p->next){ + cui_list lp = readable_list; + for(; lp; lp=lp->next){ + cui_readable p = (cui_readable)lp->data; if(!cui_select_chk(p->fd)) continue; cui_handler_call(p->obj, CUI_EVT_READABLE, p->fd); }