diff -ur cndrvcups-common-1.50/buftool/buflist.c cndrvcups-common-1.50_/buftool/buflist.c --- cndrvcups-common-1.50/buftool/buflist.c 2005-11-28 12:48:08.000000000 +0300 +++ cndrvcups-common-1.50_/buftool/buflist.c 2007-06-15 15:07:13.000000000 +0400 @@ -106,25 +106,35 @@ BufList *buflist_tail(BufList *buf_list) { - BufList *p_list = buf_list; + if (!buf_list) + return buf_list; - while( p_list != NULL ) - { - if( p_list->next == NULL ) - break; + while( buf_list->next ) + buf_list = buf_list->next; - p_list = p_list->next; - } - - return p_list; + return buf_list; } BufList *buflist_add_tail(BufList *buf_list, BufList *buf_tail) { - BufList *p_list = buflist_tail(buf_list); + if (!buf_list) + return NULL; + + buflist_tail(buf_list)->next = buf_tail; + + return buf_list; +} + +BufList *buflist_add_tail_fast(BufList *buf_list, BufList *buf_tail, BufList** buf_tail_ptr) +{ + if (!buf_list) + return NULL; - if( p_list != NULL ) - p_list->next = buf_tail; + if (!*buf_tail_ptr) + *buf_tail_ptr = buflist_tail(buf_list); + + (*buf_tail_ptr)->next = buf_tail; + (*buf_tail_ptr) = buf_tail; return buf_list; } diff -ur cndrvcups-common-1.50/buftool/buflist.h cndrvcups-common-1.50_/buftool/buflist.h --- cndrvcups-common-1.50/buftool/buflist.h 2005-11-28 12:48:08.000000000 +0300 +++ cndrvcups-common-1.50_/buftool/buflist.h 2007-06-15 15:08:16.000000000 +0400 @@ -43,6 +43,7 @@ int buflist_size(BufList* buf_list); BufList *buflist_tail(BufList* buf_list); BufList *buflist_add_tail(BufList *buf_list, BufList *buf_tail); +BufList *buflist_add_tail_fast(BufList *buf_list, BufList *buf_tail, BufList** buf_tail_ptr); BufList *buflist_dup(BufList *buf_list); int buflist_write(BufList* buf_list, int fd);