forked from premiere/premiere-libtorrent
merged fix from RC_0_16
This commit is contained in:
parent
9e94a73ddd
commit
b0996ef855
|
@ -366,6 +366,7 @@ namespace libtorrent
|
||||||
{
|
{
|
||||||
TORRENT_ASSERT_PRECOND(file_index < num_files());
|
TORRENT_ASSERT_PRECOND(file_index < num_files());
|
||||||
TORRENT_ASSERT_PRECOND(file_index >= 0);
|
TORRENT_ASSERT_PRECOND(file_index >= 0);
|
||||||
|
TORRENT_ASSERT(m_num_pieces >= 0);
|
||||||
|
|
||||||
peer_request ret;
|
peer_request ret;
|
||||||
if (file_index < 0 || file_index >= num_files())
|
if (file_index < 0 || file_index >= num_files())
|
||||||
|
|
|
@ -8567,30 +8567,30 @@ namespace libtorrent
|
||||||
|
|
||||||
fp.resize(m_torrent_file->num_files(), 0);
|
fp.resize(m_torrent_file->num_files(), 0);
|
||||||
|
|
||||||
|
if (is_seed())
|
||||||
|
{
|
||||||
|
for (int i = 0; i < m_torrent_file->num_files(); ++i)
|
||||||
|
fp[i] = m_torrent_file->files().file_size(i);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
if (flags & torrent_handle::piece_granularity)
|
if (flags & torrent_handle::piece_granularity)
|
||||||
{
|
{
|
||||||
std::copy(m_file_progress.begin(), m_file_progress.end(), fp.begin());
|
std::copy(m_file_progress.begin(), m_file_progress.end(), fp.begin());
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if (is_seed())
|
|
||||||
{
|
|
||||||
for (int i = 0; i < m_torrent_file->num_files(); ++i)
|
|
||||||
fp[i] = m_torrent_file->files().at(i).size;
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
TORRENT_ASSERT(has_picker());
|
TORRENT_ASSERT(has_picker());
|
||||||
|
|
||||||
for (int i = 0; i < m_torrent_file->num_files(); ++i)
|
for (int i = 0; i < m_torrent_file->num_files(); ++i)
|
||||||
{
|
{
|
||||||
peer_request ret = m_torrent_file->files().map_file(i, 0, 0);
|
peer_request ret = m_torrent_file->files().map_file(i, 0, 0);
|
||||||
size_type size = m_torrent_file->files().file_size(i);
|
size_type size = m_torrent_file->files().file_size(i);
|
||||||
|
TORRENT_ASSERT(ret.piece >= 0);
|
||||||
// zero sized files are considered
|
TORRENT_ASSERT(ret.piece < m_picker->num_pieces());
|
||||||
// 100% done all the time
|
if (ret.piece < 0 || ret.piece >= m_picker->num_pieces())
|
||||||
if (size == 0)
|
|
||||||
{
|
{
|
||||||
|
// this is not supposed to happen.
|
||||||
fp[i] = 0;
|
fp[i] = 0;
|
||||||
continue;
|
continue;
|
||||||
}
|
}
|
||||||
|
@ -8598,8 +8598,12 @@ namespace libtorrent
|
||||||
size_type done = 0;
|
size_type done = 0;
|
||||||
while (size > 0)
|
while (size > 0)
|
||||||
{
|
{
|
||||||
|
TORRENT_ASSERT(ret.piece < m_picker->num_pieces());
|
||||||
|
TORRENT_ASSERT(ret.piece >= 0);
|
||||||
|
|
||||||
size_type bytes_step = (std::min)(size_type(m_torrent_file->piece_size(ret.piece)
|
size_type bytes_step = (std::min)(size_type(m_torrent_file->piece_size(ret.piece)
|
||||||
- ret.start), size);
|
- ret.start), size);
|
||||||
|
|
||||||
if (m_picker->have_piece(ret.piece)) done += bytes_step;
|
if (m_picker->have_piece(ret.piece)) done += bytes_step;
|
||||||
++ret.piece;
|
++ret.piece;
|
||||||
ret.start = 0;
|
ret.start = 0;
|
||||||
|
|
Loading…
Reference in New Issue