val->val.s.i = len;
}
+void
+tr_bencInitRaw( tr_benc * val, const void * src, size_t byteCount )
+{
+ tr_bencInit( val, TYPE_STR );
+ val->val.s.i = byteCount;
+ val->val.s.s = tr_new( char, byteCount );
+ val->val.s.nofree = 0;
+ memcpy( val->val.s.s, src, byteCount );
+}
+
int
-tr_bencInitStrDupLen( tr_benc * val, const char * str, int len )
+tr_bencInitStrDup( tr_benc * val, const char * str )
{
- char * newStr = tr_strndup( str, len );
+ char * newStr = tr_strdup( str );
if( newStr == NULL )
return 1;
return 0;
}
-int
-tr_bencInitStrDup( tr_benc * val, const char * str )
-{
- return tr_bencInitStrDupLen( val, str, -1 );
-}
-
void
tr_bencInitInt( tr_benc * val, int64_t num )
{
_tr_bencInitStr( (a), ( char * )(b), (c), (d) )
void _tr_bencInitStr( tr_benc * val, char * str, int len, int nofree );
int tr_bencInitStrDup( tr_benc * val, const char * str );
+void tr_bencInitRaw( tr_benc * val, const void * src, size_t byteCount );
int tr_bencInitStrDupLen( tr_benc * val, const char * str, int len );
void tr_bencInitInt( tr_benc * val, int64_t num );
int tr_bencInitDict( tr_benc * val, int reserveCount );
assert( cp->doneHave <= cp->completeHave );
}
-const tr_bitfield * tr_cpBlockBitfield( const tr_completion * cp )
+const tr_bitfield *
+tr_cpBlockBitfield( const tr_completion * cp )
{
- assert( cp != NULL );
+ assert( cp );
+ assert( cp->blockBitfield );
+ assert( cp->blockBitfield->bits );
+ assert( cp->blockBitfield->len );
return cp->blockBitfield;
}
{
tr_block_index_t i;
+ assert( cp );
+ assert( bitfield );
+ assert( cp->blockBitfield );
+ assert( cp->blockBitfield->len == bitfield->len );
+
if( !cp || !bitfield || ( bitfield->len != cp->blockBitfield->len ) )
return TR_ERROR_ASSERT;
const int count = tr_peerMgrGetPeers( tor->handle->peerMgr,
tor->info.hash, &pex );
if( count > 0 )
- tr_bencInitStrDupLen( tr_bencDictAdd( dict, KEY_PEERS ),
- (const char*)pex, sizeof(tr_pex)*count );
+ tr_bencInitRaw( tr_bencDictAdd( dict, KEY_PEERS ), pex, sizeof(tr_pex)*count );
tr_free( pex );
}
/* add the bitfield */
bitfield = tr_cpBlockBitfield( tor->completion );
b = tr_bencDictAdd( p, KEY_PROGRESS_BITFIELD );
- tr_bencInitStrDupLen( b, (const char*)bitfield->bits, bitfield->len );
+ tr_bencInitRaw( b, bitfield->bits, bitfield->len );
/* cleanup */
tr_free( mtimes );
{
tr_globalLock( tor->handle );
+ tor->isRunning = 0;
if( !tor->isDeleting )
tr_torrentSaveResume( tor );
- tor->isRunning = 0;
tr_runInEventThread( tor->handle, stopTorrent, tor );
tr_globalUnlock( tor->handle );