Ignore:
Timestamp:
Sep 20, 2007, 4:32:01 PM (14 years ago)
Author:
livings124
Message:

merge encryption branch to trunk (xcode project is still out of date)

File:
1 edited

Legend:

Unmodified
Added
Removed
  • trunk/libtransmission/list.c

    r2851 r3105  
    1515#include "utils.h"
    1616
    17 static tr_list_t*
     17static tr_list*
    1818node_alloc( void )
    1919{
    20     return tr_new0( tr_list_t, 1 );
     20    return tr_new0( tr_list, 1 );
    2121}
    2222
    2323static void
    24 node_free( tr_list_t* node )
     24node_free( tr_list* node )
    2525{
    2626    tr_free( node );
     
    3232
    3333void
    34 tr_list_free( tr_list_t** list )
     34tr_list_free( tr_list** list )
    3535{
    3636    while( *list )
    3737    {
    38         tr_list_t * node = *list;
     38        tr_list * node = *list;
    3939        *list = (*list)->next;
    4040        node_free( node );
     
    4343
    4444void
    45 tr_list_prepend( tr_list_t ** list, void * data )
     45tr_list_prepend( tr_list ** list, void * data )
    4646{
    47     tr_list_t * node = node_alloc ();
     47    tr_list * node = node_alloc ();
    4848    node->data = data;
    4949    node->next = *list;
     
    5454
    5555void
    56 tr_list_append( tr_list_t ** list, void * data )
     56tr_list_append( tr_list ** list, void * data )
    5757{
    58     tr_list_t * node = node_alloc( );
     58    tr_list * node = node_alloc( );
    5959    node->data = data;
    6060    if( !*list )
    6161        *list = node;
    6262    else {
    63         tr_list_t * l = *list;
     63        tr_list * l = *list;
    6464        while( l->next )
    6565            l = l->next;
     
    7070
    7171void
    72 tr_list_insert_sorted( tr_list_t ** list,
     72tr_list_insert_sorted( tr_list ** list,
    7373                       void       * data,
    7474                       int          compare(const void*,const void*) )
    7575{
    7676    /* find l, the node that we'll insert this data before */
    77     tr_list_t * l;
     77    tr_list * l;
    7878    for( l=*list; l!=NULL; l=l->next ) {
    7979        const int c = (compare)( data, l->data );
     
    8787        tr_list_prepend( list, data );
    8888    else {
    89         tr_list_t * node = node_alloc( );
     89        tr_list * node = node_alloc( );
    9090        node->data = data;
    9191        if( l->prev ) { node->prev = l->prev; node->prev->next = node; }
     
    9696
    9797
    98 tr_list_t*
    99 tr_list_find_data ( tr_list_t * list, const void * data )
     98tr_list*
     99tr_list_find_data ( tr_list * list, const void * data )
    100100{
    101101    for(; list; list=list->next )
     
    106106}
    107107
    108 void
    109 tr_list_remove_data ( tr_list_t ** list, const void * data )
     108static void*
     109tr_list_remove_node ( tr_list ** list, tr_list * node )
    110110{
    111     tr_list_t * node = tr_list_find_data( *list, data );
    112     tr_list_t * prev = node ? node->prev : NULL;
    113     tr_list_t * next = node ? node->next : NULL;
     111    void * data;
     112    tr_list * prev = node ? node->prev : NULL;
     113    tr_list * next = node ? node->next : NULL;
    114114    if( prev ) prev->next = next;
    115115    if( next ) next->prev = prev;
    116116    if( *list == node ) *list = next;
     117    data = node ? node->data : NULL;
    117118    node_free( node );
     119    return data;
    118120}
    119121
    120 tr_list_t*
    121 tr_list_find ( tr_list_t * list , const void * b, TrListCompareFunc func )
     122void*
     123tr_list_pop_front( tr_list ** list )
     124{
     125    void * ret = NULL;
     126    if( *list != NULL )
     127    {
     128        ret = (*list)->data;
     129        tr_list_remove_node( list, *list );
     130    }
     131    return ret;
     132}
     133
     134void*
     135tr_list_remove_data ( tr_list ** list, const void * data )
     136{
     137    return tr_list_remove_node( list, tr_list_find_data( *list, data ) );
     138}
     139
     140void*
     141tr_list_remove( tr_list         ** list,
     142                const void       * b,
     143                TrListCompareFunc  compare_func )
     144{
     145    return tr_list_remove_node( list, tr_list_find( *list, b, compare_func ) );
     146}
     147
     148
     149tr_list*
     150tr_list_find ( tr_list * list , const void * b, TrListCompareFunc func )
    122151{
    123152    for( ; list; list=list->next )
     
    129158
    130159void
    131 tr_list_foreach( tr_list_t * list, TrListForeachFunc func )
     160tr_list_foreach( tr_list * list, TrListForeachFunc func )
    132161{
    133     while( list )
    134     {
     162    while( list != NULL ) {
    135163        func( list->data );
    136164        list = list->next;
    137165    }
    138166}
     167
     168int
     169tr_list_size( const tr_list * list )
     170{
     171    int size = 0;
     172    while( list != NULL ) {
     173        ++size;
     174        list = list->next;
     175    }
     176    return size;
     177}
Note: See TracChangeset for help on using the changeset viewer.