void tr_cpPieceRem( tr_completion * cp, tr_piece_index_t piece ) { const tr_torrent * tor = cp->tor; const tr_block_index_t start = tr_torPieceFirstBlock( tor, piece ); const tr_block_index_t end = start + tr_torPieceCountBlocks( tor, piece ); tr_block_index_t block; assert( cp ); assert( piece < tor->info.pieceCount ); assert( start < tor->blockCount ); assert( start <= end ); assert( end <= tor->blockCount ); for( block = start; block < end; ++block ) if( tr_cpBlockIsComplete( cp, block ) ) cp->sizeNow -= tr_torBlockCountBytes( tor, block ); cp->sizeWhenDoneIsDirty = 1; cp->haveValidIsDirty = 1; cp->completeBlocks[piece] = 0; tr_bitfieldRemRange ( cp->blockBitfield, start, end ); tr_bitfieldRem( cp->pieceBitfield, piece ); }
void tr_cpBlockRem( tr_completion_t * cp, int block ) { tr_torrent_t * tor = cp->tor; if( tr_cpBlockIsComplete( cp, block ) ) { (cp->blockCount)--; if( !cp->blockDownloaders[block] ) { (cp->missingBlocks[tr_blockPiece(block)])++; } } tr_bitfieldRem( cp->blockBitfield, block ); }