Fix very large file error reported by Gimp_

This commit is contained in:
Charles Kerr 2007-06-18 05:05:16 +00:00
parent 1388c51142
commit 932438eba5
2 changed files with 14 additions and 14 deletions

View File

@ -616,22 +616,22 @@ void tr_torrentAvailability( tr_torrent_t * tor, int8_t * tab, int size )
tr_lockUnlock( &tor->lock ); tr_lockUnlock( &tor->lock );
} }
size_t uint64_t
tr_torrentFileBytesCompleted ( const tr_torrent_t * tor, int fileIndex ) tr_torrentFileBytesCompleted ( const tr_torrent_t * tor, int fileIndex )
{ {
const tr_file_t * file = &tor->info.files[fileIndex]; const tr_file_t * file = &tor->info.files[fileIndex];
const int firstBlock = file->offset / tor->blockSize; const uint64_t firstBlock = file->offset / tor->blockSize;
const int firstBlockOffset = file->offset % tor->blockSize; const uint64_t firstBlockOffset = file->offset % tor->blockSize;
const int lastOffset = file->length ? file->length-1 : 0; const uint64_t lastOffset = file->length ? (file->length-1) : 0;
const int lastBlock = (file->offset + lastOffset) / tor->blockSize; const uint64_t lastBlock = (file->offset + lastOffset) / tor->blockSize;
const int lastBlockOffset = (file->offset + lastOffset) % tor->blockSize; const uint64_t lastBlockOffset = (file->offset + lastOffset) % tor->blockSize;
size_t haveBytes = 0; uint64_t haveBytes = 0;
assert( tor != NULL ); assert( tor != NULL );
assert( 0<=fileIndex && fileIndex<tor->info.fileCount ); assert( 0<=fileIndex && fileIndex<tor->info.fileCount );
assert( file->offset + file->length <= tor->info.totalSize ); assert( file->offset + file->length <= tor->info.totalSize );
assert( 0<=firstBlock && firstBlock<tor->blockCount ); assert( (int)firstBlock < tor->blockCount );
assert( 0<=lastBlock && lastBlock<tor->blockCount ); assert( (int)lastBlock < tor->blockCount );
assert( firstBlock <= lastBlock ); assert( firstBlock <= lastBlock );
assert( tr_blockPiece( firstBlock ) == file->firstPiece ); assert( tr_blockPiece( firstBlock ) == file->firstPiece );
assert( tr_blockPiece( lastBlock ) == file->lastPiece ); assert( tr_blockPiece( lastBlock ) == file->lastPiece );
@ -643,7 +643,7 @@ tr_torrentFileBytesCompleted ( const tr_torrent_t * tor, int fileIndex )
} }
else else
{ {
int i; uint64_t i;
if( tr_cpBlockIsComplete( tor->completion, firstBlock ) ) if( tr_cpBlockIsComplete( tor->completion, firstBlock ) )
haveBytes += tor->blockSize - firstBlockOffset; haveBytes += tor->blockSize - firstBlockOffset;
@ -662,8 +662,8 @@ tr_torrentFileBytesCompleted ( const tr_torrent_t * tor, int fileIndex )
float float
tr_torrentFileCompletion ( const tr_torrent_t * tor, int fileIndex ) tr_torrentFileCompletion ( const tr_torrent_t * tor, int fileIndex )
{ {
const size_t c = tr_torrentFileBytesCompleted ( tor, fileIndex ); const uint64_t c = tr_torrentFileBytesCompleted ( tor, fileIndex );
return (float)c / tor->info.files[fileIndex].length; return (double)c / tor->info.files[fileIndex].length;
} }
float* float*

View File

@ -398,7 +398,7 @@ float * tr_torrentCompletion( tr_torrent_t * );
float tr_torrentFileCompletion( const tr_torrent_t *, int fileIndex ); float tr_torrentFileCompletion( const tr_torrent_t *, int fileIndex );
size_t tr_torrentFileBytesCompleted( const tr_torrent_t *, int fileIndex ); uint64_t tr_torrentFileBytesCompleted( const tr_torrent_t *, int fileIndex );
/*********************************************************************** /***********************************************************************