Changeset 2746
- Timestamp:
- Aug 14, 2007, 2:18:54 PM (15 years ago)
- Location:
- trunk/libtransmission
- Files:
-
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/libtransmission/list.c
r2310 r2746 30 30 31 31 void 32 tr_list_free( tr_list_t* list )32 tr_list_free( tr_list_t** list ) 33 33 { 34 while( list )34 while( *list ) 35 35 { 36 tr_list_t * node = list;37 list = list->next;36 tr_list_t * node = *list; 37 *list = (*list)->next; 38 38 node_free( node ); 39 39 } 40 40 } 41 41 42 tr_list_t* 43 tr_list_prepend( tr_list_t * list, void * data )42 void 43 tr_list_prepend( tr_list_t ** list, void * data ) 44 44 { 45 45 tr_list_t * node = node_alloc (); 46 46 node->data = data; 47 node->next = list;48 if( list )49 list->prev = node;50 returnnode;47 node->next = *list; 48 if( *list ) 49 (*list)->prev = node; 50 *list = node; 51 51 } 52 52 53 tr_list_t* 54 tr_list_append( tr_list_t * list, void * data )53 void 54 tr_list_append( tr_list_t ** list, void * data ) 55 55 { 56 56 tr_list_t * node = node_alloc( ); 57 57 node->data = data; 58 if( ! list )59 returnnode;58 if( !*list ) 59 *list = node; 60 60 else { 61 tr_list_t * l = list;61 tr_list_t * l = *list; 62 62 while( l->next ) 63 63 l = l->next; 64 64 l->next = node; 65 65 node->prev = l; 66 return list;67 66 } 68 67 } 68 69 void 70 tr_list_insert_sorted( tr_list_t ** list, 71 void * data, 72 int compare(const void*,const void*) ) 73 { 74 /* find l, the node that we'll insert this data before */ 75 tr_list_t * l; 76 for( l=*list; l!=NULL; l=l->next ) { 77 const int c = (compare)( data, l->data ); 78 if( c <= 0 ) 79 break; 80 } 81 82 if( l == NULL) 83 tr_list_append( list, data ); 84 else if( l == *list ) 85 tr_list_prepend( list, data ); 86 else { 87 tr_list_t * node = node_alloc( ); 88 node->data = data; 89 if( l->prev ) { node->prev = l->prev; node->prev->next = node; } 90 node->next = l; 91 l->prev = node; 92 } 93 } 94 69 95 70 96 tr_list_t* … … 78 104 } 79 105 80 tr_list_t* 81 tr_list_remove_data ( tr_list_t * list, const void * data )106 void 107 tr_list_remove_data ( tr_list_t ** list, const void * data ) 82 108 { 83 tr_list_t * node = tr_list_find_data( list, data );109 tr_list_t * node = tr_list_find_data( *list, data ); 84 110 tr_list_t * prev = node ? node->prev : NULL; 85 111 tr_list_t * next = node ? node->next : NULL; 86 112 if( prev ) prev->next = next; 87 113 if( next ) next->prev = prev; 88 if( list == node )list = next;114 if( *list == node ) *list = next; 89 115 node_free( node ); 90 return list;91 116 } 92 117 93 118 tr_list_t* 94 tr_list_find ( tr_list_t * list , TrListCompareFunc func, const void * b)119 tr_list_find ( tr_list_t * list , const void * b, TrListCompareFunc func ) 95 120 { 96 121 for( ; list; list=list->next ) -
trunk/libtransmission/list.h
r2552 r2746 20 20 tr_list_t; 21 21 22 void tr_list_free ( tr_list_t* ); 23 tr_list_t* tr_list_append ( tr_list_t*, void * data ); 24 tr_list_t* tr_list_prepend ( tr_list_t*, void * data ); 25 tr_list_t* tr_list_remove_data ( tr_list_t*, const void * data ); 22 typedef int (*TrListCompareFunc)(const void * a, const void * b); 23 typedef void (*TrListForeachFunc)(void *); 26 24 27 typedef int (*TrListCompareFunc)(const void * a, const void * b); 28 tr_list_t* tr_list_find ( tr_list_t*, TrListCompareFunc func, const void * b ); 29 tr_list_t* tr_list_find_data ( tr_list_t*, const void * data ); 25 void tr_list_free ( tr_list_t ** list ); 30 26 31 typedef void (*TrListForeachFunc)(void *); 32 void tr_list_foreach ( tr_list_t*, TrListForeachFunc func ); 27 void tr_list_append ( tr_list_t ** list, 28 void * data ); 29 30 void tr_list_prepend ( tr_list_t ** list, 31 void * data ); 32 33 void tr_list_remove_data ( tr_list_t ** list, 34 const void * data ); 35 36 void tr_list_insert_sorted ( tr_list_t ** list, 37 void * data, 38 TrListCompareFunc compare_func ); 39 40 tr_list_t* tr_list_find ( tr_list_t * list, 41 const void * b, 42 TrListCompareFunc compare_func ); 43 44 tr_list_t* tr_list_find_data ( tr_list_t * list, 45 const void * data ); 46 47 void tr_list_foreach ( tr_list_t * list, 48 TrListForeachFunc foreach_func ); 33 49 34 50 #endif /* TR_LIST_H */ -
trunk/libtransmission/peer.c
r2573 r2746 314 314 tr_bitfieldFree( peer->reqfield ); 315 315 tr_list_foreach( peer->outRequests, tr_free ); 316 tr_list_free( peer->outRequests );316 tr_list_free( &peer->outRequests ); 317 317 tr_free( peer->inRequests ); 318 318 tr_free( peer->buf ); -
trunk/libtransmission/peermessages.h
r2531 r2746 124 124 r = (tr_request_t*) peer->outRequests->data; 125 125 assert( r != NULL ); 126 peer->outRequests = tr_list_remove_data(peer->outRequests, r );126 tr_list_remove_data( &peer->outRequests, r ); 127 127 128 128 if( !tr_cpPieceIsComplete( tor->completion, r->index ) ) /* sanity clause */ … … 227 227 /* Drop older requests from the last time it was unchoked, if any */ 228 228 tr_list_foreach( peer->outRequests, tr_free ); 229 tr_list_free( peer->outRequests );229 tr_list_free( &peer->outRequests ); 230 230 peer->outRequests = NULL; 231 231 } -
trunk/libtransmission/peerparse.h
r2555 r2746 245 245 r->begin = begin; 246 246 r->length = length; 247 peer->outRequests = tr_list_append(peer->outRequests, r );247 tr_list_append( &peer->outRequests, r ); 248 248 249 249 return TR_OK; … … 419 419 req.begin = begin; 420 420 req.length = length; 421 while(( l = tr_list_find( peer->outRequests, reqCompare, &req) )) {421 while(( l = tr_list_find( peer->outRequests, &req, reqCompare ) )) { 422 422 tr_request_t * r = (tr_request_t *) l->data; 423 peer->outRequests = tr_list_remove_data(peer->outRequests, r );423 tr_list_remove_data( &peer->outRequests, r ); 424 424 tr_free( r ); 425 425 } -
trunk/libtransmission/transmission.c
r2591 r2746 271 271 tor = tr_torrentInit( h, path, destination, flags, NULL ); 272 272 if( tor != NULL ) { 273 list = tr_list_append(list, tor );273 tr_list_append( &list, tor ); 274 274 //fprintf (stderr, "#%d - %s\n", n, tor->info.name ); 275 275 n++; … … 285 285 assert( i==n ); 286 286 287 tr_list_free( list );287 tr_list_free( &list ); 288 288 289 289 *setmeCount = n;
Note: See TracChangeset
for help on using the changeset viewer.