fixed sign-compare warnings and some refactor (#1354)

fixed sign-compare warnings and some refactor. make sequence_number backed by std::int64_t
This commit is contained in:
Alden Torres 2016-11-27 08:46:53 -05:00 committed by Arvid Norberg
parent 0df9d1c641
commit d5c4cd7280
49 changed files with 317 additions and 326 deletions

View File

@ -245,7 +245,6 @@ rule warnings ( properties * )
# enable these warnings again, once the other ones are dealt with # enable these warnings again, once the other ones are dealt with
result += <cflags>-Wno-weak-vtables ; result += <cflags>-Wno-weak-vtables ;
result += <cflags>-Wno-sign-compare ;
result += <cflags>-Wno-sign-conversion ; result += <cflags>-Wno-sign-conversion ;
result += <cflags>-Wno-shorten-64-to-32 ; result += <cflags>-Wno-shorten-64-to-32 ;
} }

View File

@ -446,7 +446,7 @@ namespace
ses.dht_get_item(public_key, salt); ses.dht_get_item(public_key, salt);
} }
void put_string(entry& e, std::array<char, 64>& sig, std::uint64_t& seq void put_string(entry& e, std::array<char, 64>& sig, std::int64_t& seq
, std::string const& salt, std::string pk, std::string sk , std::string const& salt, std::string pk, std::string sk
, std::string data) , std::string data)
{ {
@ -470,7 +470,7 @@ namespace
TORRENT_ASSERT(public_key.size() == 32); TORRENT_ASSERT(public_key.size() == 32);
std::array<char, 32> key; std::array<char, 32> key;
std::copy(public_key.begin(), public_key.end(), key.begin()); std::copy(public_key.begin(), public_key.end(), key.begin());
ses.dht_put_item(key, [&](entry& e, std::array<char, 64>& sig, std::uint64_t& seq ses.dht_put_item(key, [&](entry& e, std::array<char, 64>& sig, std::int64_t& seq
, std::string const& salt) { put_string(e, sig, seq, salt , std::string const& salt) { put_string(e, sig, seq, salt
, public_key, private_key, data); } , public_key, private_key, data); }
, salt); , salt);

View File

@ -391,7 +391,7 @@ namespace libtorrent
void dht_put_mutable_item(std::array<char, 32> key void dht_put_mutable_item(std::array<char, 32> key
, std::function<void(entry&, std::array<char,64>& , std::function<void(entry&, std::array<char,64>&
, std::uint64_t&, std::string const&)> cb , std::int64_t&, std::string const&)> cb
, std::string salt = std::string()); , std::string salt = std::string());
void dht_get_peers(sha1_hash const& info_hash); void dht_get_peers(sha1_hash const& info_hash);

View File

@ -312,7 +312,7 @@ namespace libtorrent
// ---- 32 bit boundary --- // ---- 32 bit boundary ---
// the sum of all refcounts in all blocks // the sum of all refcounts in all blocks
std::uint32_t refcount = 0; std::int32_t refcount = 0;
#if TORRENT_USE_ASSERTS #if TORRENT_USE_ASSERTS
// the number of times this piece has finished hashing // the number of times this piece has finished hashing
@ -339,11 +339,11 @@ namespace libtorrent
std::size_t operator()(cached_piece_entry const& p) const std::size_t operator()(cached_piece_entry const& p) const
{ return std::size_t(p.storage.get()) + std::size_t(p.piece); } { return std::size_t(p.storage.get()) + std::size_t(p.piece); }
}; };
typedef std::unordered_set<cached_piece_entry, hash_value> cache_t; using cache_t = std::unordered_set<cached_piece_entry, hash_value>;
public: public:
typedef cache_t::const_iterator const_iterator; using const_iterator = cache_t::const_iterator;
// returns the number of blocks this job would cause to be read in // returns the number of blocks this job would cause to be read in
int pad_job(disk_io_job const* j, int blocks_in_piece int pad_job(disk_io_job const* j, int blocks_in_piece
@ -359,7 +359,7 @@ namespace libtorrent
list_iterator<cached_piece_entry> write_lru_pieces() const list_iterator<cached_piece_entry> write_lru_pieces() const
{ return m_lru[cached_piece_entry::write_lru].iterate(); } { return m_lru[cached_piece_entry::write_lru].iterate(); }
int num_write_lru_pieces() const { return int(m_lru[cached_piece_entry::write_lru].size()); } int num_write_lru_pieces() const { return m_lru[cached_piece_entry::write_lru].size(); }
// mark this piece for deletion. If there are no outstanding // mark this piece for deletion. If there are no outstanding
// requests to this piece, it's removed immediately, and the // requests to this piece, it's removed immediately, and the
@ -507,21 +507,21 @@ namespace libtorrent
int m_max_volatile_blocks; int m_max_volatile_blocks;
// the number of blocks (buffers) allocated by volatile pieces. // the number of blocks (buffers) allocated by volatile pieces.
std::uint32_t m_volatile_size; std::int32_t m_volatile_size;
// the number of blocks in the cache // the number of blocks in the cache
// that are in the read cache // that are in the read cache
std::uint32_t m_read_cache_size; std::int32_t m_read_cache_size;
// the number of blocks in the cache // the number of blocks in the cache
// that are in the write cache // that are in the write cache
std::uint32_t m_write_cache_size; std::int32_t m_write_cache_size;
// the number of blocks that are currently sitting // the number of blocks that are currently sitting
// in peer's send buffers. If two peers are sending // in peer's send buffers. If two peers are sending
// the same block, it counts as 2, even though there're // the same block, it counts as 2, even though there're
// no buffer duplication // no buffer duplication
std::uint32_t m_send_buffer_blocks; std::int32_t m_send_buffer_blocks;
// the number of blocks with a refcount > 0, i.e. // the number of blocks with a refcount > 0, i.e.
// they may not be evicted // they may not be evicted

View File

@ -87,12 +87,12 @@ namespace libtorrent
void release_memory(); void release_memory();
std::uint32_t in_use() const int in_use() const
{ {
std::unique_lock<std::mutex> l(m_pool_mutex); std::unique_lock<std::mutex> l(m_pool_mutex);
return m_in_use; return m_in_use;
} }
std::uint32_t num_to_evict(int num_needed = 0); int num_to_evict(int num_needed = 0);
void set_settings(aux::session_settings const& sett, error_code& ec); void set_settings(aux::session_settings const& sett, error_code& ec);

View File

@ -354,7 +354,7 @@ namespace libtorrent
{ {
TORRENT_ASSERT(index >= 0); TORRENT_ASSERT(index >= 0);
TORRENT_ASSERT(index < int(m_files.size())); TORRENT_ASSERT(index < int(m_files.size()));
return m_files[index]; return m_files[std::size_t(index)];
} }
TORRENT_DEPRECATED TORRENT_DEPRECATED
file_entry at(iterator i) const; file_entry at(iterator i) const;

View File

@ -140,7 +140,7 @@ namespace detail
m_access_list.insert(range(zero<Addr>(), 0)); m_access_list.insert(range(zero<Addr>(), 0));
} }
void add_rule(Addr first, Addr last, int flags) void add_rule(Addr first, Addr last, std::uint32_t const flags)
{ {
TORRENT_ASSERT(!m_access_list.empty()); TORRENT_ASSERT(!m_access_list.empty());
TORRENT_ASSERT(first < last || first == last); TORRENT_ASSERT(first < last || first == last);
@ -212,7 +212,7 @@ namespace detail
std::vector<ip_range<ExternalAddressType>> ret; std::vector<ip_range<ExternalAddressType>> ret;
ret.reserve(m_access_list.size()); ret.reserve(m_access_list.size());
for (typename range_t::const_iterator i = m_access_list.begin() for (auto i = m_access_list.begin()
, end(m_access_list.end()); i != end;) , end(m_access_list.end()); i != end;)
{ {
ip_range<ExternalAddressType> r; ip_range<ExternalAddressType> r;
@ -234,7 +234,7 @@ namespace detail
struct range struct range
{ {
range(Addr addr, int a = 0): start(addr), access(a) {} // NOLINT range(Addr addr, std::uint32_t a = 0) : start(addr), access(a) {} // NOLINT
bool operator<(range const& r) const { return start < r.start; } bool operator<(range const& r) const { return start < r.start; }
bool operator<(Addr const& a) const { return start < a; } bool operator<(Addr const& a) const { return start < a; }
Addr start; Addr start;
@ -243,8 +243,7 @@ namespace detail
std::uint32_t access; std::uint32_t access;
}; };
using range_t = std::set<range>; std::set<range> m_access_list;
range_t m_access_list;
}; };
} }

View File

@ -73,7 +73,7 @@ namespace libtorrent { namespace dht
struct sequence_number struct sequence_number
{ {
sequence_number() : value(0) {} sequence_number() : value(0) {}
explicit sequence_number(std::uint64_t v) : value(v) {} explicit sequence_number(std::int64_t v) : value(v) {}
sequence_number(sequence_number const& sqn) = default; sequence_number(sequence_number const& sqn) = default;
bool operator<(sequence_number rhs) const bool operator<(sequence_number rhs) const
{ return value < rhs.value; } { return value < rhs.value; }
@ -87,7 +87,7 @@ namespace libtorrent { namespace dht
{ return value == rhs.value; } { return value == rhs.value; }
sequence_number& operator++() sequence_number& operator++()
{ ++value; return *this; } { ++value; return *this; }
std::uint64_t value; std::int64_t value;
}; };
}} }}

View File

@ -50,7 +50,7 @@ namespace libtorrent {
peer_class_t class_at(int i) const peer_class_t class_at(int i) const
{ {
TORRENT_ASSERT(i >= 0 && i < int(m_size)); TORRENT_ASSERT(i >= 0 && i < int(m_size));
return m_class[i]; return m_class[std::size_t(i)];
} }
private: private:

View File

@ -63,4 +63,3 @@ namespace libtorrent
}; };
} }
#endif #endif

View File

@ -125,7 +125,7 @@ namespace libtorrent
struct downloading_piece struct downloading_piece
{ {
downloading_piece() : index((std::numeric_limits<std::uint32_t>::max)()) downloading_piece() : index(std::numeric_limits<std::int32_t>::max())
, info_idx((std::numeric_limits<std::uint16_t>::max)()) , info_idx((std::numeric_limits<std::uint16_t>::max)())
, finished(0) , finished(0)
, passed_hash_check(0) , passed_hash_check(0)
@ -137,7 +137,7 @@ namespace libtorrent
bool operator<(downloading_piece const& rhs) const { return index < rhs.index; } bool operator<(downloading_piece const& rhs) const { return index < rhs.index; }
// the index of the piece // the index of the piece
std::uint32_t index; std::int32_t index;
// info about each block in this piece. this is an index into the // info about each block in this piece. this is an index into the
// m_block_info array, when multiplied by m_blocks_per_piece. // m_block_info array, when multiplied by m_blocks_per_piece.
@ -223,7 +223,7 @@ namespace libtorrent
TORRENT_ASSERT(index >= 0); TORRENT_ASSERT(index >= 0);
TORRENT_ASSERT(index < int(m_piece_map.size())); TORRENT_ASSERT(index < int(m_piece_map.size()));
piece_pos const& p = m_piece_map[index]; piece_pos const& p = m_piece_map[std::size_t(index)];
return p.downloading(); return p.downloading();
} }
@ -418,10 +418,10 @@ namespace libtorrent
// functor that compares indices on downloading_pieces // functor that compares indices on downloading_pieces
struct has_index struct has_index
{ {
explicit has_index(int i): index(std::uint32_t(i)) { TORRENT_ASSERT(i >= 0); } explicit has_index(int i) : index(i) { TORRENT_ASSERT(i >= 0); }
bool operator()(const downloading_piece& p) const bool operator()(downloading_piece const& p) const
{ return p.index == index; } { return p.index == index; }
std::uint32_t index; std::int32_t index;
}; };
int blocks_in_last_piece() const int blocks_in_last_piece() const
@ -676,7 +676,7 @@ namespace libtorrent
#endif #endif
bool partial_compare_rarest_first(downloading_piece const* lhs bool partial_compare_rarest_first(downloading_piece const* lhs
, downloading_piece const* rhs) const; , downloading_piece const* rhs) const;
void break_one_seed(); void break_one_seed();
@ -697,9 +697,8 @@ namespace libtorrent
// shuffles the given piece inside it's priority range // shuffles the given piece inside it's priority range
void shuffle(int priority, int elem_index); void shuffle(int priority, int elem_index);
typedef std::vector<downloading_piece>::iterator dlpiece_iter; std::vector<downloading_piece>::iterator add_download_piece(int index);
dlpiece_iter add_download_piece(int index); void erase_download_piece(std::vector<downloading_piece>::iterator i);
void erase_download_piece(dlpiece_iter i);
std::vector<downloading_piece>::const_iterator find_dl_piece(int queue, int index) const; std::vector<downloading_piece>::const_iterator find_dl_piece(int queue, int index) const;
std::vector<downloading_piece>::iterator find_dl_piece(int queue, int index); std::vector<downloading_piece>::iterator find_dl_piece(int queue, int index);

View File

@ -407,7 +407,7 @@ namespace libtorrent
// To generate the signature, you may want to use the // To generate the signature, you may want to use the
// ``sign_mutable_item`` function. // ``sign_mutable_item`` function.
// //
// std::uint64_t& seq // std::int64_t& seq
// current sequence number. May be zero if there is no current value. // current sequence number. May be zero if there is no current value.
// The function is expected to set this to the new sequence number of // The function is expected to set this to the new sequence number of
// the value that is to be stored. Sequence numbers must be monotonically // the value that is to be stored. Sequence numbers must be monotonically
@ -429,7 +429,7 @@ namespace libtorrent
// calling the callback in between is convenient. // calling the callback in between is convenient.
void dht_put_item(std::array<char, 32> key void dht_put_item(std::array<char, 32> key
, std::function<void(entry&, std::array<char, 64>& , std::function<void(entry&, std::array<char, 64>&
, std::uint64_t&, std::string const&)> cb , std::int64_t&, std::string const&)> cb
, std::string salt = std::string()); , std::string salt = std::string());
void dht_get_peers(sha1_hash const& info_hash); void dht_get_peers(sha1_hash const& info_hash);

View File

@ -231,12 +231,12 @@ namespace libtorrent
} }
// accessors for specific bytes // accessors for specific bytes
std::uint8_t& operator[](size_t i) std::uint8_t& operator[](std::size_t i)
{ {
TORRENT_ASSERT(i < size()); TORRENT_ASSERT(i < size());
return reinterpret_cast<std::uint8_t*>(m_number)[i]; return reinterpret_cast<std::uint8_t*>(m_number)[i];
} }
std::uint8_t const& operator[](size_t i) const std::uint8_t const& operator[](std::size_t i) const
{ {
TORRENT_ASSERT(i < size()); TORRENT_ASSERT(i < size());
return reinterpret_cast<std::uint8_t const*>(m_number)[i]; return reinterpret_cast<std::uint8_t const*>(m_number)[i];

View File

@ -103,14 +103,14 @@ struct average_accumulator
// let the average roll over, but only be worth a // let the average roll over, but only be worth a
// single sample // single sample
m_num_samples = 1; m_num_samples = 1;
m_sample_sum = std::uint64_t(ret); m_sample_sum = ret;
return ret; return ret;
} }
private: private:
int m_num_samples = 0; int m_num_samples = 0;
std::uint64_t m_sample_sum = 0; std::int64_t m_sample_sum = 0;
}; };
} }

View File

@ -317,7 +317,7 @@ TORRENT_TEST(dht_dual_stack_mutable_item)
std::tie(pk, sk) = lt::dht::ed25519_create_keypair(seed); std::tie(pk, sk) = lt::dht::ed25519_create_keypair(seed);
ses.dht_put_item(pk.bytes, [&](lt::entry& item, std::array<char, 64>& sig ses.dht_put_item(pk.bytes, [&](lt::entry& item, std::array<char, 64>& sig
, std::uint64_t& seq, std::string const& salt) , std::int64_t& seq, std::string const& salt)
{ {
item = "mutable item"; item = "mutable item";
seq = 1; seq = 1;

View File

@ -1778,13 +1778,12 @@ namespace libtorrent {
// this specific output is parsed by tools/parse_session_stats.py // this specific output is parsed by tools/parse_session_stats.py
// if this is changed, that parser should also be changed // if this is changed, that parser should also be changed
char msg[50]; char msg[50];
std::snprintf(msg, sizeof(msg), "session stats (%d values): " std::snprintf(msg, sizeof(msg), "session stats (%d values): " , int(values.size()));
, int(values.size()));
std::string ret = msg; std::string ret = msg;
bool first = true; bool first = true;
for (int i = 0; i < values.size(); ++i) for (auto v : values)
{ {
std::snprintf(msg, sizeof(msg), first ? "%" PRIu64 : ", %" PRIu64, values[i]); std::snprintf(msg, sizeof(msg), first ? "%" PRId64 : ", %" PRId64, v);
first = false; first = false;
ret += msg; ret += msg;
} }

View File

@ -281,10 +281,12 @@ static_assert(sizeof(job_action_name)/sizeof(job_action_name[0])
, int(pe->num_blocks), int(pe->blocks_in_piece), int(pe->hashing_done) , int(pe->num_blocks), int(pe->blocks_in_piece), int(pe->hashing_done)
, int(pe->marked_for_deletion), int(pe->need_readback), pe->hash_passes , int(pe->marked_for_deletion), int(pe->need_readback), pe->hash_passes
, int(pe->read_jobs.size()), int(pe->jobs.size())); , int(pe->read_jobs.size()), int(pe->jobs.size()));
for (int i = 0; i < pe->piece_log.size(); ++i) bool first = true;
for (auto const& log : pe->piece_log)
{ {
assert_print("%s %s (%d)", (i==0?"":",") assert_print("%s %s (%d)", (first ? "" : ",")
, job_name(pe->piece_log[i].job), pe->piece_log[i].block); , job_name(log.job), log.block);
first = false;
} }
} }
assert_print("\n"); assert_print("\n");
@ -1259,7 +1261,7 @@ int block_cache::pad_job(disk_io_job const* j, int blocks_in_piece
} }
void block_cache::insert_blocks(cached_piece_entry* pe, int block, span<file::iovec_t const> iov void block_cache::insert_blocks(cached_piece_entry* pe, int block, span<file::iovec_t const> iov
, disk_io_job* j, int flags) , disk_io_job* j, int const flags)
{ {
#ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS #ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS
INVARIANT_CHECK; INVARIANT_CHECK;
@ -1273,17 +1275,17 @@ void block_cache::insert_blocks(cached_piece_entry* pe, int block, span<file::io
TORRENT_ASSERT(pe->in_use); TORRENT_ASSERT(pe->in_use);
for (int i = 0; i < iov.size(); ++i, ++block) for (auto const& buf : iov)
{ {
// each iovec buffer has to be the size of a block (or the size of the last block) // each iovec buffer has to be the size of a block (or the size of the last block)
TORRENT_PIECE_ASSERT(iov[i].iov_len == (std::min)(block_size() TORRENT_PIECE_ASSERT(int(buf.iov_len) == std::min(block_size()
, pe->storage->files()->piece_size(pe->piece) - block * block_size()), pe); , pe->storage->files()->piece_size(pe->piece) - block * block_size()), pe);
// no nullptrs allowed // no nullptrs allowed
TORRENT_ASSERT(iov[i].iov_base); TORRENT_ASSERT(buf.iov_base != nullptr);
#ifdef TORRENT_DEBUG_BUFFERS #ifdef TORRENT_DEBUG_BUFFERS
TORRENT_PIECE_ASSERT(is_disk_buffer(static_cast<char*>(iov[i].iov_base)), pe); TORRENT_PIECE_ASSERT(is_disk_buffer(static_cast<char*>(buf.iov_base)), pe);
#endif #endif
if (pe->blocks[block].buf && (flags & blocks_inc_refcount)) if (pe->blocks[block].buf && (flags & blocks_inc_refcount))
@ -1294,13 +1296,13 @@ void block_cache::insert_blocks(cached_piece_entry* pe, int block, span<file::io
// either free the block or insert it. Never replace a block // either free the block or insert it. Never replace a block
if (pe->blocks[block].buf) if (pe->blocks[block].buf)
{ {
free_buffer(static_cast<char*>(iov[i].iov_base)); free_buffer(static_cast<char*>(buf.iov_base));
} }
else else
{ {
pe->blocks[block].buf = static_cast<char*>(iov[i].iov_base); pe->blocks[block].buf = static_cast<char*>(buf.iov_base);
TORRENT_PIECE_ASSERT(iov[i].iov_base != nullptr, pe); TORRENT_PIECE_ASSERT(buf.iov_base != nullptr, pe);
TORRENT_PIECE_ASSERT(pe->blocks[block].dirty == false, pe); TORRENT_PIECE_ASSERT(pe->blocks[block].dirty == false, pe);
++pe->num_blocks; ++pe->num_blocks;
++m_read_cache_size; ++m_read_cache_size;
@ -1315,6 +1317,8 @@ void block_cache::insert_blocks(cached_piece_entry* pe, int block, span<file::io
} }
TORRENT_ASSERT(pe->blocks[block].buf != nullptr); TORRENT_ASSERT(pe->blocks[block].buf != nullptr);
block++;
} }
TORRENT_PIECE_ASSERT(pe->cache_state != cached_piece_entry::read_lru1_ghost, pe); TORRENT_PIECE_ASSERT(pe->cache_state != cached_piece_entry::read_lru1_ghost, pe);

View File

@ -1647,7 +1647,7 @@ namespace libtorrent
TORRENT_ASSERT(ptr <= buf + sizeof(buf)); TORRENT_ASSERT(ptr <= buf + sizeof(buf));
send_buffer(buf, ptr - buf); send_buffer(buf, int(ptr - buf));
stats_counters().inc_stats_counter(counters::num_outgoing_extended); stats_counters().inc_stats_counter(counters::num_outgoing_extended);
} }
@ -1840,7 +1840,7 @@ namespace libtorrent
// there should be a version too // there should be a version too
// but where do we put that info? // but where do we put that info?
int const last_seen_complete = root.dict_find_int_value("complete_ago", -1); int const last_seen_complete = int(root.dict_find_int_value("complete_ago", -1));
if (last_seen_complete >= 0) set_last_seen_complete(last_seen_complete); if (last_seen_complete >= 0) set_last_seen_complete(last_seen_complete);
auto client_info = root.dict_find_string_value("v"); auto client_info = root.dict_find_string_value("v");
@ -2204,7 +2204,7 @@ namespace libtorrent
#endif #endif
m_sent_bitfield = true; m_sent_bitfield = true;
send_buffer(reinterpret_cast<char const*>(msg.data()), msg.size()); send_buffer(reinterpret_cast<char const*>(msg.data()), int(msg.size()));
stats_counters().inc_stats_counter(counters::num_outgoing_bitfield); stats_counters().inc_stats_counter(counters::num_outgoing_bitfield);
} }
@ -2900,7 +2900,7 @@ namespace libtorrent
// TODO: 3 this is weird buffer handling // TODO: 3 this is weird buffer handling
span<char> const buf = m_recv_buffer.mutable_buffer(); span<char> const buf = m_recv_buffer.mutable_buffer();
TORRENT_ASSERT(buf.size() >= m_recv_buffer.packet_size()); TORRENT_ASSERT(int(buf.size()) >= m_recv_buffer.packet_size());
rc4_decrypt({buf.data(), size_t(m_recv_buffer.packet_size())}); rc4_decrypt({buf.data(), size_t(m_recv_buffer.packet_size())});
recv_buffer = m_recv_buffer.get(); recv_buffer = m_recv_buffer.get();
@ -3007,7 +3007,7 @@ namespace libtorrent
// TODO: 3 this is weird buffer handling // TODO: 3 this is weird buffer handling
span<char> const buf = m_recv_buffer.mutable_buffer(); span<char> const buf = m_recv_buffer.mutable_buffer();
TORRENT_ASSERT(buf.size() >= m_recv_buffer.packet_size()); TORRENT_ASSERT(int(buf.size()) >= m_recv_buffer.packet_size());
rc4_decrypt({buf.data(), size_t(m_recv_buffer.packet_size())}); rc4_decrypt({buf.data(), size_t(m_recv_buffer.packet_size())});
recv_buffer = m_recv_buffer.get(); recv_buffer = m_recv_buffer.get();
@ -3068,7 +3068,7 @@ namespace libtorrent
// ia is always rc4, so decrypt it // ia is always rc4, so decrypt it
// TODO: 3 this is weird buffer handling // TODO: 3 this is weird buffer handling
span<char> const buf = m_recv_buffer.mutable_buffer(); span<char> const buf = m_recv_buffer.mutable_buffer();
TORRENT_ASSERT(buf.size() >= m_recv_buffer.packet_size()); TORRENT_ASSERT(int(buf.size()) >= m_recv_buffer.packet_size());
rc4_decrypt({buf.data(), size_t(m_recv_buffer.packet_size())}); rc4_decrypt({buf.data(), size_t(m_recv_buffer.packet_size())});
#ifndef TORRENT_DISABLE_LOGGING #ifndef TORRENT_DISABLE_LOGGING

View File

@ -119,17 +119,17 @@ namespace libtorrent
#endif #endif
} }
std::uint32_t disk_buffer_pool::num_to_evict(int num_needed) int disk_buffer_pool::num_to_evict(int const num_needed)
{ {
int ret = 0; int ret = 0;
std::unique_lock<std::mutex> l(m_pool_mutex); std::unique_lock<std::mutex> l(m_pool_mutex);
if (m_exceeded_max_size) if (m_exceeded_max_size)
ret = m_in_use - (std::min)(m_low_watermark, int(m_max_use - m_observers.size()*2)); ret = m_in_use - std::min(m_low_watermark, int(m_max_use - m_observers.size() * 2));
if (m_in_use + num_needed > m_max_use) if (m_in_use + num_needed > m_max_use)
ret = (std::max)(ret, int(m_in_use + num_needed - m_max_use)); ret = std::max(ret, m_in_use + num_needed - m_max_use);
if (ret < 0) ret = 0; if (ret < 0) ret = 0;
else if (ret > m_in_use) ret = m_in_use; else if (ret > m_in_use) ret = m_in_use;
@ -271,14 +271,14 @@ namespace libtorrent
#if TORRENT_HAVE_MMAP && !defined TORRENT_NO_DEPRECATE #if TORRENT_HAVE_MMAP && !defined TORRENT_NO_DEPRECATE
if (m_cache_pool) if (m_cache_pool)
{ {
if (m_free_list.size() <= (m_max_use - m_low_watermark) if (int(m_free_list.size()) <= (m_max_use - m_low_watermark)
/ 2 && !m_exceeded_max_size) / 2 && !m_exceeded_max_size)
{ {
m_exceeded_max_size = true; m_exceeded_max_size = true;
m_trigger_cache_trim(); m_trigger_cache_trim();
} }
if (m_free_list.empty()) return nullptr; if (m_free_list.empty()) return nullptr;
std::uint64_t slot_index = m_free_list.back(); std::int64_t const slot_index = m_free_list.back();
m_free_list.pop_back(); m_free_list.pop_back();
ret = m_cache_pool + (slot_index * 0x4000); ret = m_cache_pool + (slot_index * 0x4000);
TORRENT_ASSERT(is_disk_buffer(ret, l)); TORRENT_ASSERT(is_disk_buffer(ret, l));
@ -298,7 +298,7 @@ namespace libtorrent
? 20 // use small increments once we've exceeded the cache size ? 20 // use small increments once we've exceeded the cache size
: m_cache_buffer_chunk_size : m_cache_buffer_chunk_size
? m_cache_buffer_chunk_size ? m_cache_buffer_chunk_size
: (std::max)(m_max_use / 10, 1); : std::max(m_max_use / 10, 1);
m_pool.set_next_size(effective_block_size); m_pool.set_next_size(effective_block_size);
ret = static_cast<char*>(m_pool.malloc()); ret = static_cast<char*>(m_pool.malloc());
} }
@ -418,7 +418,7 @@ namespace libtorrent
// a 20th of everything exceeding 1 GiB // a 20th of everything exceeding 1 GiB
// and a 10th of everything below a GiB // and a 10th of everything below a GiB
std::int64_t const gb = 1024 * 1024 * 1024; constexpr std::int64_t gb = 1024 * 1024 * 1024;
std::int64_t result = 0; std::int64_t result = 0;
if (phys_ram > 4 * gb) if (phys_ram > 4 * gb)
@ -447,7 +447,7 @@ namespace libtorrent
// 32 bit builds should capped below 2 GB of memory, even // 32 bit builds should capped below 2 GB of memory, even
// when more actual ram is available, because we're still // when more actual ram is available, because we're still
// constrained by the 32 bit virtual address space. // constrained by the 32 bit virtual address space.
m_max_use = (std::min)(2 * 1024 * 1024 * 3 / 4 * 1024 m_max_use = std::min(2 * 1024 * 1024 * 3 / 4 * 1024
/ m_block_size, m_max_use); / m_block_size, m_max_use);
} }
} }
@ -455,7 +455,7 @@ namespace libtorrent
{ {
m_max_use = cache_size; m_max_use = cache_size;
} }
m_low_watermark = m_max_use - (std::max)(16, sett.get_int(settings_pack::max_queued_disk_bytes) / 0x4000); m_low_watermark = m_max_use - std::max(16, sett.get_int(settings_pack::max_queued_disk_bytes) / 0x4000);
if (m_low_watermark < 0) m_low_watermark = 0; if (m_low_watermark < 0) m_low_watermark = 0;
if (m_in_use >= m_max_use && !m_exceeded_max_size) if (m_in_use >= m_max_use && !m_exceeded_max_size)
{ {
@ -483,7 +483,8 @@ namespace libtorrent
TORRENT_UNUSED(best_effort); TORRENT_UNUSED(best_effort);
close(m_cache_fd); close(m_cache_fd);
m_cache_fd = -1; m_cache_fd = -1;
std::vector<int>().swap(m_free_list); m_free_list.clear();
m_free_list.shrink_to_fit();
} }
else if (m_cache_pool == nullptr && !sett.get_str(settings_pack::mmap_cache).empty()) else if (m_cache_pool == nullptr && !sett.get_str(settings_pack::mmap_cache).empty())
{ {
@ -528,7 +529,7 @@ namespace libtorrent
} }
else else
{ {
TORRENT_ASSERT((size_t(m_cache_pool) & 0xfff) == 0); TORRENT_ASSERT((std::size_t(m_cache_pool) & 0xfff) == 0);
m_free_list.reserve(m_max_use); m_free_list.reserve(m_max_use);
for (int i = 0; i < m_max_use; ++i) for (int i = 0; i < m_max_use; ++i)
m_free_list.push_back(i); m_free_list.push_back(i);
@ -614,4 +615,3 @@ namespace libtorrent
} }
} }

View File

@ -2320,7 +2320,7 @@ namespace libtorrent
// treat a short read as an error. The hash will be invalid, the // treat a short read as an error. The hash will be invalid, the
// block cannot be cached and the main thread should skip the rest // block cannot be cached and the main thread should skip the rest
// of this file // of this file
if (read_ret != iov.iov_len) if (read_ret != int(iov.iov_len))
{ {
ret = status_t::fatal_disk_error; ret = status_t::fatal_disk_error;
j->error.ec = boost::asio::error::eof; j->error.ec = boost::asio::error::eof;

View File

@ -63,7 +63,7 @@ namespace libtorrent
std::lock_guard<std::mutex> l(m_mutex); std::lock_guard<std::mutex> l(m_mutex);
if (i == m_max_threads) return; if (i == m_max_threads) return;
m_max_threads = i; m_max_threads = i;
if (m_threads.size() < i) return; if (int(m_threads.size()) < i) return;
stop_threads(int(m_threads.size()) - i); stop_threads(int(m_threads.size()) - i);
} }

View File

@ -309,7 +309,7 @@ namespace libtorrent
} }
// write pad // write pad
for (int j = 0; j < inbuf.size() - available_input; ++j) for (int j = 0; j < int(inbuf.size()) - available_input; ++j)
{ {
ret += '='; ret += '=';
} }
@ -372,7 +372,7 @@ namespace libtorrent
if (0 == (flags & string::no_padding)) if (0 == (flags & string::no_padding))
{ {
// write pad // write pad
for (int j = 0; j < outbuf.size() - num_out; ++j) for (int j = 0; j < int(outbuf.size()) - num_out; ++j)
{ {
ret += '='; ret += '=';
} }

View File

@ -1365,10 +1365,10 @@ namespace libtorrent
std::uint32_t silly_hash(std::string const& str) std::uint32_t silly_hash(std::string const& str)
{ {
std::uint32_t ret = 1; std::uint32_t ret = 1;
for (int i = 0; i < str.size(); ++i) for (auto const ch : str)
{ {
if (str[i] == 0) continue; if (ch == 0) continue;
ret *= int(str[i]); ret *= std::uint32_t(ch);
} }
return ret; return ret;
} }

View File

@ -130,7 +130,7 @@ namespace libtorrent
branch_len = leaf - path.c_str(); branch_len = leaf - path.c_str();
// trim trailing slashes // trim trailing slashes
if (branch_len > 0 && branch_path[branch_len-1] == TORRENT_SEPARATOR) if (branch_len > 0 && branch_path[branch_len - 1] == TORRENT_SEPARATOR)
--branch_len; --branch_len;
} }
if (branch_len <= 0) if (branch_len <= 0)
@ -140,12 +140,12 @@ namespace libtorrent
return; return;
} }
if (branch_len >= m_name.size() if (branch_len >= int(m_name.size())
&& std::memcmp(branch_path, m_name.c_str(), m_name.size()) == 0) && std::memcmp(branch_path, m_name.c_str(), m_name.size()) == 0)
{ {
// the +1 is to skip the trailing '/' (or '\') // the +1 is to skip the trailing '/' (or '\')
int const offset = int(m_name.size()) int const offset = int(m_name.size())
+ (m_name.size() == branch_len ? 0 : 1); + (int(m_name.size()) == branch_len ? 0 : 1);
branch_path += offset; branch_path += offset;
branch_len -= offset; branch_len -= offset;
e.no_root_dir = false; e.no_root_dir = false;
@ -159,7 +159,7 @@ namespace libtorrent
auto p = std::find_if(m_paths.rbegin(), m_paths.rend() auto p = std::find_if(m_paths.rbegin(), m_paths.rend()
, [&] (std::string const& str) , [&] (std::string const& str)
{ {
if (str.size() != branch_len) return false; if (int(str.size()) != branch_len) return false;
return std::memcmp(str.c_str(), branch_path, branch_len) == 0; return std::memcmp(str.c_str(), branch_path, branch_len) == 0;
}); });
@ -323,16 +323,16 @@ namespace libtorrent
void file_storage::apply_pointer_offset(ptrdiff_t const off) void file_storage::apply_pointer_offset(ptrdiff_t const off)
{ {
for (int i = 0; i < m_files.size(); ++i) for (auto& f : m_files)
{ {
if (m_files[i].name_len == internal_file_entry::name_is_owned) continue; if (f.name_len == internal_file_entry::name_is_owned) continue;
m_files[i].name += off; f.name += off;
} }
for (int i = 0; i < m_file_hashes.size(); ++i) for (auto& h : m_file_hashes)
{ {
if (m_file_hashes[i] == nullptr) continue; if (h == nullptr) continue;
m_file_hashes[i] += off; h += off;
} }
} }
@ -1139,12 +1139,12 @@ namespace libtorrent
return std::make_tuple(begin_piece, end_piece); return std::make_tuple(begin_piece, end_piece);
} }
std::tuple<int, int> file_piece_range_inclusive(file_storage const& fs, int file) std::tuple<int, int> file_piece_range_inclusive(file_storage const& fs, int const file)
{ {
peer_request const range = fs.map_file(file, 0, 1); peer_request const range = fs.map_file(file, 0, 1);
std::int64_t const file_size = fs.file_size(file); std::int64_t const file_size = fs.file_size(file);
std::int64_t const piece_size = fs.piece_length(); std::int64_t const piece_size = fs.piece_length();
int const end_piece = (range.piece * piece_size + range.start + file_size - 1) / piece_size + 1; int const end_piece = int((range.piece * piece_size + range.start + file_size - 1) / piece_size + 1);
return std::make_tuple(range.piece, end_piece); return std::make_tuple(range.piece, end_piece);
} }

View File

@ -430,7 +430,7 @@ void http_connection::on_timeout(std::weak_ptr<http_connection> p
// the connection timed out. If we have more endpoints to try, just // the connection timed out. If we have more endpoints to try, just
// close this connection. The on_connect handler will try the next // close this connection. The on_connect handler will try the next
// endpoint in the list. // endpoint in the list.
if (c->m_next_ep < c->m_endpoints.size()) if (c->m_next_ep < int(c->m_endpoints.size()))
{ {
error_code ec; error_code ec;
c->m_sock.close(ec); c->m_sock.close(ec);
@ -544,7 +544,7 @@ void http_connection::on_resolve(error_code const& e
void http_connection::connect() void http_connection::connect()
{ {
TORRENT_ASSERT(m_next_ep < m_endpoints.size()); TORRENT_ASSERT(m_next_ep < int(m_endpoints.size()));
std::shared_ptr<http_connection> me(shared_from_this()); std::shared_ptr<http_connection> me(shared_from_this());
@ -581,8 +581,8 @@ void http_connection::connect()
} }
} }
TORRENT_ASSERT(m_next_ep < m_endpoints.size()); TORRENT_ASSERT(m_next_ep < int(m_endpoints.size()));
if (m_next_ep >= m_endpoints.size()) return; if (m_next_ep >= int(m_endpoints.size())) return;
tcp::endpoint target_address = m_endpoints[m_next_ep]; tcp::endpoint target_address = m_endpoints[m_next_ep];
++m_next_ep; ++m_next_ep;
@ -609,7 +609,7 @@ void http_connection::on_connect(error_code const& e)
async_write(m_sock, boost::asio::buffer(m_sendbuffer) async_write(m_sock, boost::asio::buffer(m_sendbuffer)
, std::bind(&http_connection::on_write, shared_from_this(), _1)); , std::bind(&http_connection::on_write, shared_from_this(), _1));
} }
else if (m_next_ep < m_endpoints.size() && !m_abort) else if (m_next_ep < int(m_endpoints.size()) && !m_abort)
{ {
// The connection failed. Try the next endpoint in the list. // The connection failed. Try the next endpoint in the list.
error_code ec; error_code ec;

View File

@ -321,7 +321,7 @@ restart_response:
m_chunked_encoding = string_begins_no_case("chunked", value.c_str()); m_chunked_encoding = string_begins_no_case("chunked", value.c_str());
} }
TORRENT_ASSERT(m_recv_pos <= recv_buffer.size()); TORRENT_ASSERT(m_recv_pos <= int(recv_buffer.size()));
TORRENT_ASSERT(pos <= recv_buffer.end()); TORRENT_ASSERT(pos <= recv_buffer.end());
newline = std::find(pos, recv_buffer.end(), '\n'); newline = std::find(pos, recv_buffer.end(), '\n');
} }

View File

@ -384,7 +384,7 @@ namespace libtorrent
received_bytes(0, header_size - m_partial_chunk_header); received_bytes(0, header_size - m_partial_chunk_header);
m_partial_chunk_header = 0; m_partial_chunk_header = 0;
TORRENT_ASSERT(chunk_size != 0 || chunk_start.size() <= header_size || chunk_start[header_size] == 'H'); TORRENT_ASSERT(chunk_size != 0 || int(chunk_start.size()) <= header_size || chunk_start[header_size] == 'H');
// cut out the chunk header from the receive buffer // cut out the chunk header from the receive buffer
TORRENT_ASSERT(m_chunk_pos + m_body_start < INT_MAX); TORRENT_ASSERT(m_chunk_pos + m_body_start < INT_MAX);
m_recv_buffer.cut(header_size, t->block_size() + 1024, int(m_chunk_pos + m_body_start)); m_recv_buffer.cut(header_size, t->block_size() + 1024, int(m_chunk_pos + m_body_start));

View File

@ -113,7 +113,7 @@ namespace
item.value.reset(new char[size]); item.value.reset(new char[size]);
item.size = size; item.size = size;
} }
std::memcpy(item.value.get(), buf.data(), size); std::memcpy(item.value.get(), buf.data(), buf.size());
} }
void touch_item(dht_immutable_item& f, address const& addr) void touch_item(dht_immutable_item& f, address const& addr)

View File

@ -36,6 +36,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include <cinttypes> // for PRId64 et.al. #include <cinttypes> // for PRId64 et.al.
#include <functional> #include <functional>
#include <tuple> #include <tuple>
#include <array>
#ifndef TORRENT_DISABLE_LOGGING #ifndef TORRENT_DISABLE_LOGGING
#include "libtorrent/hex.hpp" // to_hex #include "libtorrent/hex.hpp" // to_hex
@ -1062,7 +1063,7 @@ void node::incoming_request(msg const& m, entry& e)
// number matches the expected value before replacing it // number matches the expected value before replacing it
// this is critical for avoiding race conditions when multiple // this is critical for avoiding race conditions when multiple
// writers are accessing the same slot // writers are accessing the same slot
if (msg_keys[5] && item_seq.value != std::uint64_t(msg_keys[5].int_value())) if (msg_keys[5] && item_seq.value != msg_keys[5].int_value())
{ {
m_counters.inc_stats_counter(counters::dht_invalid_put); m_counters.inc_stats_counter(counters::dht_invalid_put);
incoming_error(e, "CAS mismatch", 301); incoming_error(e, "CAS mismatch", 301);
@ -1188,14 +1189,16 @@ void node::write_nodes_entries(sha1_hash const& info_hash
node::protocol_descriptor const& node::map_protocol_to_descriptor(udp protocol) node::protocol_descriptor const& node::map_protocol_to_descriptor(udp protocol)
{ {
static protocol_descriptor descriptors[] = static std::array<protocol_descriptor, 2> descriptors =
{ {udp::v4(), "n4", "nodes"} {{
, {udp::v6(), "n6", "nodes6"} }; {udp::v4(), "n4", "nodes"},
{udp::v6(), "n6", "nodes6"}
}};
for (int i = 0; i < sizeof(descriptors) / sizeof(protocol_descriptor); ++i) for (auto const& d : descriptors)
{ {
if (descriptors[i].protocol == protocol) if (d.protocol == protocol)
return descriptors[i]; return d;
} }
TORRENT_ASSERT_FAIL(); TORRENT_ASSERT_FAIL();

View File

@ -98,7 +98,7 @@ node_id generate_id_impl(address const& ip_, std::uint32_t r)
if (ip_.is_v6()) if (ip_.is_v6())
{ {
b6 = ip_.to_v6().to_bytes(); b6 = ip_.to_v6().to_bytes();
ip = &b6[0]; ip = b6.data();
num_octets = 8; num_octets = 8;
mask = v6mask; mask = v6mask;
} }
@ -106,7 +106,7 @@ node_id generate_id_impl(address const& ip_, std::uint32_t r)
#endif #endif
{ {
b4 = ip_.to_v4().to_bytes(); b4 = ip_.to_v4().to_bytes();
ip = &b4[0]; ip = b4.data();
num_octets = 4; num_octets = 4;
mask = v4mask; mask = v4mask;
} }
@ -133,7 +133,7 @@ node_id generate_id_impl(address const& ip_, std::uint32_t r)
id[1] = (c >> 16) & 0xff; id[1] = (c >> 16) & 0xff;
id[2] = (((c >> 8) & 0xf8) | random(0x7)) & 0xff; id[2] = (((c >> 8) & 0xf8) | random(0x7)) & 0xff;
for (int i = 3; i < 19; ++i) id[i] = std::uint8_t(random(0xff)); for (std::size_t i = 3; i < 19; ++i) id[i] = random(0xff) & 0xff;
id[19] = r & 0xff; id[19] = r & 0xff;
return id; return id;
@ -204,13 +204,13 @@ bool matching_prefix(node_id const& nid, int mask, int prefix, int offset)
return (id[0] & mask) == prefix; return (id[0] & mask) == prefix;
} }
node_id generate_prefix_mask(int bits) node_id generate_prefix_mask(int const bits)
{ {
TORRENT_ASSERT(bits >= 0); TORRENT_ASSERT(bits >= 0);
TORRENT_ASSERT(bits <= 160); TORRENT_ASSERT(bits <= 160);
node_id mask(nullptr); node_id mask;
int b = 0; std::size_t b = 0;
for (; b < bits - 7; b += 8) mask[b / 8] |= 0xff; for (; int(b) < bits - 7; b += 8) mask[b / 8] |= 0xff;
if (bits < 160) mask[b / 8] |= (0xff << (8 - (bits & 7))) & 0xff; if (bits < 160) mask[b / 8] |= (0xff << (8 - (bits & 7))) & 0xff;
return mask; return mask;
} }

View File

@ -960,24 +960,14 @@ void routing_table::update_node_id(node_id const& id)
// then add them all back. First add the main nodes, then the replacement // then add them all back. First add the main nodes, then the replacement
// nodes // nodes
for (int i = 0; i < old_buckets.size(); ++i) for (auto const& b : old_buckets)
{ for (auto const& n : b.live_nodes)
bucket_t const& bucket = old_buckets[i].live_nodes; add_node(n);
for (int j = 0; j < bucket.size(); ++j)
{
add_node(bucket[j]);
}
}
// now add back the replacement nodes // now add back the replacement nodes
for (int i = 0; i < old_buckets.size(); ++i) for (auto const& b : old_buckets)
{ for (auto const& n : b.replacements)
bucket_t const& bucket = old_buckets[i].replacements; add_node(n);
for (int j = 0; j < bucket.size(); ++j)
{
add_node(bucket[j]);
}
}
} }
void routing_table::for_each_node( void routing_table::for_each_node(

View File

@ -450,7 +450,7 @@ bool rpc_manager::invoke(entry& e, udp::endpoint const& target_addr
std::string transaction_id; std::string transaction_id;
transaction_id.resize(2); transaction_id.resize(2);
char* out = &transaction_id[0]; char* out = &transaction_id[0];
std::uint16_t tid = std::uint16_t(random(0x7fff)); std::uint16_t const tid = std::uint16_t(random(0x7fff));
detail::write_uint16(tid, out); detail::write_uint16(tid, out);
e["t"] = transaction_id; e["t"] = transaction_id;

View File

@ -207,22 +207,23 @@ void traversal_algorithm::add_entry(node_id const& id
if (m_results.size() > 100) if (m_results.size() > 100)
{ {
for (int i = 100; i < int(m_results.size()); ++i) std::for_each(m_results.begin() + 100, m_results.end()
, [this](std::shared_ptr<observer> const& ptr)
{ {
if ((m_results[i]->flags & (observer::flag_queried | observer::flag_failed | observer::flag_alive)) if ((ptr->flags & (observer::flag_queried | observer::flag_failed | observer::flag_alive))
== observer::flag_queried) == observer::flag_queried)
{ {
// set the done flag on any outstanding queries to prevent them from // set the done flag on any outstanding queries to prevent them from
// calling finished() or failed() // calling finished() or failed()
m_results[i]->flags |= observer::flag_done; ptr->flags |= observer::flag_done;
TORRENT_ASSERT(m_invoke_count > 0); TORRENT_ASSERT(m_invoke_count > 0);
--m_invoke_count; --m_invoke_count;
} }
#if TORRENT_USE_ASSERTS #if TORRENT_USE_ASSERTS
m_results[i]->m_was_abandoned = true; ptr->m_was_abandoned = true;
#endif #endif
} });
m_results.resize(100); m_results.resize(100);
} }
} }

View File

@ -118,8 +118,9 @@ namespace libtorrent
for (int i = 0; i < num_pieces; ++i) for (int i = 0; i < num_pieces; ++i)
{ {
int slot = read_uint32(ptr); std::uint32_t const uslot = read_uint32(ptr);
if (slot == 0xffffffff) continue; if (uslot == 0xffffffff) continue;
int const slot = int(uslot);
// invalid part-file // invalid part-file
TORRENT_ASSERT(slot < num_pieces); TORRENT_ASSERT(slot < num_pieces);
@ -331,8 +332,8 @@ namespace libtorrent
if (ec || v.iov_len == 0) return; if (ec || v.iov_len == 0) return;
std::int64_t ret = f.writev(file_offset, v, ec); std::int64_t ret = f.writev(file_offset, v, ec);
TORRENT_ASSERT(ec || ret == v.iov_len); TORRENT_ASSERT(ec || ret == std::int64_t(v.iov_len));
if (ec || ret != v.iov_len) return; if (ec || ret != std::int64_t(v.iov_len)) return;
// we're done with the disk I/O, grab the lock again to update // we're done with the disk I/O, grab the lock again to update
// the slot map // the slot map

View File

@ -136,7 +136,7 @@ namespace libtorrent
bufs = abufs; bufs = abufs;
need_destruct = true; need_destruct = true;
size_t num_bufs = 0; size_t num_bufs = 0;
for (int i = 0; to_process > 0 && i < iovec.size(); ++i) for (std::size_t i = 0; to_process > 0 && i < iovec.size(); ++i)
{ {
++num_bufs; ++num_bufs;
int const size = int(iovec[i].size()); int const size = int(iovec[i].size());
@ -370,11 +370,11 @@ void rc4_init(const unsigned char* in, unsigned long len, rc4 *state)
keylen = state->x; keylen = state->x;
/* make RC4 perm and shuffle */ /* make RC4 perm and shuffle */
for (x = 0; x < key_size; ++x) { for (x = 0; x < int(key_size); ++x) {
s[x] = std::uint8_t(x); s[x] = std::uint8_t(x);
} }
for (j = x = y = 0; x < key_size; x++) { for (j = x = y = 0; x < int(key_size); x++) {
y = (y + state->buf[x] + key[j++]) & 255; y = (y + state->buf[x] + key[j++]) & 255;
if (j == keylen) { if (j == keylen) {
j = 0; j = 0;

View File

@ -40,7 +40,7 @@ namespace libtorrent
{ {
if (std::find(m_class.begin(), m_class.begin() + m_size, c) if (std::find(m_class.begin(), m_class.begin() + m_size, c)
!= m_class.begin() + m_size) return; != m_class.begin() + m_size) return;
if (m_size >= m_class.size() - 1) if (m_size >= int(m_class.size()) - 1)
{ {
TORRENT_ASSERT_FAIL(); TORRENT_ASSERT_FAIL();
return; return;

View File

@ -596,7 +596,7 @@ namespace libtorrent
for (;;) for (;;)
{ {
char const* p = hash.data(); char const* p = hash.data();
for (int i = 0; i < hash.size() / sizeof(std::uint32_t); ++i) for (int i = 0; i < int(hash.size() / sizeof(std::uint32_t)); ++i)
{ {
++loops; ++loops;
int const piece = detail::read_uint32(p) % num_pieces; int const piece = detail::read_uint32(p) % num_pieces;
@ -2900,7 +2900,7 @@ namespace libtorrent
&& (bytes_left * 1000) / rate < m_settings.get_int(settings_pack::predictive_piece_announce)) && (bytes_left * 1000) / rate < m_settings.get_int(settings_pack::predictive_piece_announce))
{ {
// we predict we will complete this piece very soon. // we predict we will complete this piece very soon.
t->predicted_have_piece(piece, (bytes_left * 1000) / rate); t->predicted_have_piece(piece, int((bytes_left * 1000) / rate));
} }
} }
} }
@ -3044,8 +3044,6 @@ namespace libtorrent
piece_picker& picker = t->picker(); piece_picker& picker = t->picker();
TORRENT_ASSERT(p.piece == p.piece);
TORRENT_ASSERT(p.start == p.start);
TORRENT_ASSERT(picker.num_peers(block_finished) == 0); TORRENT_ASSERT(picker.num_peers(block_finished) == 0);
// std::fprintf(stderr, "peer_connection mark_as_finished peer: %p piece: %d block: %d\n" // std::fprintf(stderr, "peer_connection mark_as_finished peer: %p piece: %d block: %d\n"
@ -3593,8 +3591,8 @@ namespace libtorrent
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(int(block.piece_index) < t->torrent_file().num_pieces()); TORRENT_ASSERT(block.piece_index < t->torrent_file().num_pieces());
TORRENT_ASSERT(int(block.block_index) < t->torrent_file().piece_size(block.piece_index)); TORRENT_ASSERT(block.block_index < t->torrent_file().piece_size(block.piece_index));
// if all the peers that requested this block has been // if all the peers that requested this block has been
// cancelled, then just ignore the cancel. // cancelled, then just ignore the cancel.
@ -3805,7 +3803,7 @@ namespace libtorrent
send_suggest(*i); send_suggest(*i);
} }
int const max = m_settings.get_int(settings_pack::max_suggest_pieces); int const max = m_settings.get_int(settings_pack::max_suggest_pieces);
if (m_suggest_pieces.size() > max) if (int(m_suggest_pieces.size()) > max)
{ {
int const to_erase = m_suggest_pieces.size() - max; int const to_erase = m_suggest_pieces.size() - max;
m_suggest_pieces.erase(m_suggest_pieces.begin() m_suggest_pieces.erase(m_suggest_pieces.begin()
@ -3884,7 +3882,7 @@ namespace libtorrent
} }
int block_offset = block.block.block_index * t->block_size(); int block_offset = block.block.block_index * t->block_size();
int block_size = (std::min)(t->torrent_file().piece_size( int block_size = std::min(t->torrent_file().piece_size(
block.block.piece_index) - block_offset, t->block_size()); block.block.piece_index) - block_offset, t->block_size());
TORRENT_ASSERT(block_size > 0); TORRENT_ASSERT(block_size > 0);
TORRENT_ASSERT(block_size <= t->block_size()); TORRENT_ASSERT(block_size <= t->block_size());
@ -3937,7 +3935,7 @@ namespace libtorrent
#endif #endif
block_offset = block.block.block_index * t->block_size(); block_offset = block.block.block_index * t->block_size();
block_size = (std::min)(t->torrent_file().piece_size( block_size = std::min(t->torrent_file().piece_size(
block.block.piece_index) - block_offset, t->block_size()); block.block.piece_index) - block_offset, t->block_size());
TORRENT_ASSERT(block_size > 0); TORRENT_ASSERT(block_size > 0);
TORRENT_ASSERT(block_size <= t->block_size()); TORRENT_ASSERT(block_size <= t->block_size());
@ -5064,7 +5062,7 @@ namespace libtorrent
// be blocked because we have to verify the hash first, so keep going with the // be blocked because we have to verify the hash first, so keep going with the
// next request. However, only let each peer have one hash verification outstanding // next request. However, only let each peer have one hash verification outstanding
// at any given time // at any given time
for (int i = 0; i < m_requests.size() for (int i = 0; i < int(m_requests.size())
&& (send_buffer_size() + m_reading_bytes < buffer_size_watermark); ++i) && (send_buffer_size() + m_reading_bytes < buffer_size_watermark); ++i)
{ {
TORRENT_ASSERT(t->ready_for_connections()); TORRENT_ASSERT(t->ready_for_connections());
@ -5828,12 +5826,12 @@ namespace libtorrent
// if we received exactly as many bytes as we provided a receive buffer // if we received exactly as many bytes as we provided a receive buffer
// for. There most likely are more bytes to read, and we should grow our // for. There most likely are more bytes to read, and we should grow our
// receive buffer. // receive buffer.
TORRENT_ASSERT(bytes_transferred <= m_recv_buffer.max_receive()); TORRENT_ASSERT(int(bytes_transferred) <= m_recv_buffer.max_receive());
bool const grow_buffer = (bytes_transferred == m_recv_buffer.max_receive()); bool const grow_buffer = (int(bytes_transferred) == m_recv_buffer.max_receive());
account_received_bytes(bytes_transferred); account_received_bytes(bytes_transferred);
if (m_extension_outstanding_bytes > 0) if (m_extension_outstanding_bytes > 0)
m_extension_outstanding_bytes -= (std::min)(m_extension_outstanding_bytes, int(bytes_transferred)); m_extension_outstanding_bytes -= std::min(m_extension_outstanding_bytes, int(bytes_transferred));
check_graceful_pause(); check_graceful_pause();
if (m_disconnecting) return; if (m_disconnecting) return;
@ -5843,7 +5841,7 @@ namespace libtorrent
if (grow_buffer) if (grow_buffer)
{ {
error_code ec; error_code ec;
std::size_t buffer_size = m_socket->available(ec); int buffer_size = int(m_socket->available(ec));
if (ec) if (ec)
{ {
disconnect(ec, op_available); disconnect(ec, op_available);
@ -5852,7 +5850,7 @@ namespace libtorrent
#ifndef TORRENT_DISABLE_LOGGING #ifndef TORRENT_DISABLE_LOGGING
peer_log(peer_log_alert::incoming, "AVAILABLE" peer_log(peer_log_alert::incoming, "AVAILABLE"
, "%d bytes", int(buffer_size)); , "%d bytes", buffer_size);
#endif #endif
request_bandwidth(download_channel, buffer_size); request_bandwidth(download_channel, buffer_size);
@ -5862,7 +5860,7 @@ namespace libtorrent
if (buffer_size > 0) if (buffer_size > 0)
{ {
span<char> const vec = m_recv_buffer.reserve(buffer_size); span<char> const vec = m_recv_buffer.reserve(buffer_size);
size_t bytes = m_socket->read_some( std::size_t bytes = m_socket->read_some(
boost::asio::mutable_buffers_1(vec.data(), vec.size()), ec); boost::asio::mutable_buffers_1(vec.data(), vec.size()), ec);
// this is weird. You would imagine read_some() would do this // this is weird. You would imagine read_some() would do this
@ -5872,7 +5870,7 @@ namespace libtorrent
if (should_log(peer_log_alert::incoming)) if (should_log(peer_log_alert::incoming))
{ {
peer_log(peer_log_alert::incoming, "SYNC_READ", "max: %d ret: %d e: %s" peer_log(peer_log_alert::incoming, "SYNC_READ", "max: %d ret: %d e: %s"
, int(buffer_size), int(bytes), ec ? ec.message().c_str() : ""); , buffer_size, int(bytes), ec ? ec.message().c_str() : "");
} }
#endif #endif

View File

@ -40,8 +40,8 @@ namespace libtorrent {
counters::counters() counters::counters()
{ {
#ifdef ATOMIC_LLONG_LOCK_FREE #ifdef ATOMIC_LLONG_LOCK_FREE
for (int i = 0; i < m_stats_counter.size(); ++i) for (auto& counter : m_stats_counter)
m_stats_counter[i].store(0, std::memory_order_relaxed); counter.store(0, std::memory_order_relaxed);
#else #else
std::memset(m_stats_counter, 0, sizeof(m_stats_counter)); std::memset(m_stats_counter, 0, sizeof(m_stats_counter));
#endif #endif
@ -50,7 +50,7 @@ namespace libtorrent {
counters::counters(counters const& c) counters::counters(counters const& c)
{ {
#ifdef ATOMIC_LLONG_LOCK_FREE #ifdef ATOMIC_LLONG_LOCK_FREE
for (int i = 0; i < m_stats_counter.size(); ++i) for (std::size_t i = 0; i < m_stats_counter.size(); ++i)
m_stats_counter[i].store( m_stats_counter[i].store(
c.m_stats_counter[i].load(std::memory_order_relaxed) c.m_stats_counter[i].load(std::memory_order_relaxed)
, std::memory_order_relaxed); , std::memory_order_relaxed);
@ -63,7 +63,7 @@ namespace libtorrent {
counters& counters::operator=(counters const& c) counters& counters::operator=(counters const& c)
{ {
#ifdef ATOMIC_LLONG_LOCK_FREE #ifdef ATOMIC_LLONG_LOCK_FREE
for (int i = 0; i < m_stats_counter.size(); ++i) for (std::size_t i = 0; i < m_stats_counter.size(); ++i)
m_stats_counter[i].store( m_stats_counter[i].store(
c.m_stats_counter[i].load(std::memory_order_relaxed) c.m_stats_counter[i].load(std::memory_order_relaxed)
, std::memory_order_relaxed); , std::memory_order_relaxed);

View File

@ -170,7 +170,8 @@ namespace libtorrent
return ret; return ret;
} }
piece_picker::dlpiece_iter piece_picker::add_download_piece(int piece) std::vector<piece_picker::downloading_piece>::iterator
piece_picker::add_download_piece(int const piece)
{ {
TORRENT_ASSERT(piece >= 0); TORRENT_ASSERT(piece >= 0);
TORRENT_ASSERT(piece < int(m_piece_map.size())); TORRENT_ASSERT(piece < int(m_piece_map.size()));
@ -190,7 +191,7 @@ namespace libtorrent
else else
{ {
// there is already free space in m_block_info, grab one range // there is already free space in m_block_info, grab one range
block_index = m_free_block_infos.back(); block_index = int(m_free_block_infos.back());
m_free_block_infos.pop_back(); m_free_block_infos.pop_back();
} }
@ -249,7 +250,7 @@ namespace libtorrent
m_piece_map[i->index].download_state = piece_pos::piece_open; m_piece_map[i->index].download_state = piece_pos::piece_open;
m_downloads[download_state].erase(i); m_downloads[download_state].erase(i);
TORRENT_ASSERT(prev_size == m_downloads[download_state].size() + 1); TORRENT_ASSERT(prev_size == int(m_downloads[download_state].size()) + 1);
#if TORRENT_USE_INVARIANT_CHECKS #if TORRENT_USE_INVARIANT_CHECKS
check_piece_state(); check_piece_state();
@ -289,7 +290,7 @@ namespace libtorrent
downloading_piece const& dp) downloading_piece const& dp)
{ {
int idx = int(dp.info_idx) * m_blocks_per_piece; int idx = int(dp.info_idx) * m_blocks_per_piece;
TORRENT_ASSERT(idx + m_blocks_per_piece <= m_block_info.size()); TORRENT_ASSERT(idx + m_blocks_per_piece <= int(m_block_info.size()));
return &m_block_info[idx]; return &m_block_info[idx];
} }
@ -334,7 +335,7 @@ namespace libtorrent
void piece_picker::verify_pick(std::vector<piece_block> const& picked void piece_picker::verify_pick(std::vector<piece_block> const& picked
, bitfield const& bits) const , bitfield const& bits) const
{ {
TORRENT_ASSERT(bits.size() == m_piece_map.size()); TORRENT_ASSERT(bits.size() == int(m_piece_map.size()));
for (std::vector<piece_block>::const_iterator i = picked.begin() for (std::vector<piece_block>::const_iterator i = picked.begin()
, end(picked.end()); i != end; ++i) , end(picked.end()); i != end; ++i)
{ {
@ -412,8 +413,8 @@ namespace libtorrent
int num_pieces = have.size(); int num_pieces = have.size();
for (int i = 0; i < num_pieces; ++i) for (int i = 0; i < num_pieces; ++i)
{ {
int h = have[i]; bool h = have[i];
TORRENT_ASSERT(m_piece_map[i].have_peers.count(p) == h); TORRENT_ASSERT(m_piece_map[std::size_t(i)].have_peers.count(p) == (h ? 1 : 0));
} }
#else #else
TORRENT_UNUSED(have); TORRENT_UNUSED(have);
@ -617,7 +618,7 @@ namespace libtorrent
} }
#ifdef TORRENT_DEBUG_REFCOUNTS #ifdef TORRENT_DEBUG_REFCOUNTS
TORRENT_ASSERT(p.have_peers.size() == p.peer_count + m_seeds); TORRENT_ASSERT(int(p.have_peers.size()) == p.peer_count + m_seeds);
#endif #endif
if (p.index == piece_pos::we_have_index) if (p.index == piece_pos::we_have_index)
++num_have; ++num_have;
@ -901,8 +902,8 @@ namespace libtorrent
// priority bucket. If it doesn't, it means this piece changed // priority bucket. If it doesn't, it means this piece changed
// state without updating the corresponding entry in the pieces list // state without updating the corresponding entry in the pieces list
TORRENT_ASSERT(m_priority_boundaries[priority] >= elem_index); TORRENT_ASSERT(m_priority_boundaries[priority] >= elem_index);
TORRENT_ASSERT(priority == 0 || m_priority_boundaries[priority-1] <= elem_index); TORRENT_ASSERT(priority == 0 || m_priority_boundaries[priority - 1] <= elem_index);
TORRENT_ASSERT(priority + 1 == m_priority_boundaries.size() || m_priority_boundaries[priority+1] > elem_index); TORRENT_ASSERT(priority + 1 == int(m_priority_boundaries.size()) || m_priority_boundaries[priority + 1] > elem_index);
int index = m_pieces[elem_index]; int index = m_pieces[elem_index];
// update the piece_map // update the piece_map
@ -1252,13 +1253,13 @@ namespace libtorrent
// nothing set, nothing to do here // nothing set, nothing to do here
if (bitmask.none_set()) return; if (bitmask.none_set()) return;
if (bitmask.all_set() && bitmask.size() == m_piece_map.size()) if (bitmask.all_set() && bitmask.size() == int(m_piece_map.size()))
{ {
inc_refcount_all(peer); inc_refcount_all(peer);
return; return;
} }
const int size = (std::min)(50, int(bitmask.size()/2)); int const size = std::min(50, bitmask.size() / 2);
// this is an optimization where if just a few // this is an optimization where if just a few
// pieces end up changing, instead of making // pieces end up changing, instead of making
@ -1340,7 +1341,7 @@ namespace libtorrent
#ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS #ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS
INVARIANT_CHECK; INVARIANT_CHECK;
#endif #endif
TORRENT_ASSERT(bitmask.size() <= m_piece_map.size()); TORRENT_ASSERT(bitmask.size() <= int(m_piece_map.size()));
#ifdef TORRENT_PICKER_LOG #ifdef TORRENT_PICKER_LOG
std::cerr << "[" << this << "] " << "dec_refcount(bitfield)" << std::endl; std::cerr << "[" << this << "] " << "dec_refcount(bitfield)" << std::endl;
@ -1349,13 +1350,13 @@ namespace libtorrent
// nothing set, nothing to do here // nothing set, nothing to do here
if (bitmask.none_set()) return; if (bitmask.none_set()) return;
if (bitmask.all_set() && bitmask.size() == m_piece_map.size()) if (bitmask.all_set() && bitmask.size() == int(m_piece_map.size()))
{ {
dec_refcount_all(peer); dec_refcount_all(peer);
return; return;
} }
const int size = (std::min)(50, int(bitmask.size()/2)); int const size = std::min(50, bitmask.size() / 2);
// this is an optimization where if just a few // this is an optimization where if just a few
// pieces end up changing, instead of making // pieces end up changing, instead of making
@ -1521,16 +1522,18 @@ namespace libtorrent
#endif #endif
} }
void piece_picker::piece_passed(int index) void piece_picker::piece_passed(int const index)
{ {
piece_pos& p = m_piece_map[index]; TORRENT_ASSERT(index >= 0);
TORRENT_ASSERT(index < int(m_piece_map.size()));
piece_pos& p = m_piece_map[std::size_t(index)];
int download_state = p.download_queue(); int download_state = p.download_queue();
// this is kind of odd. Could this happen? // this is kind of odd. Could this happen?
TORRENT_ASSERT(download_state != piece_pos::piece_open); TORRENT_ASSERT(download_state != piece_pos::piece_open);
if (download_state == piece_pos::piece_open) return; if (download_state == piece_pos::piece_open) return;
std::vector<downloading_piece>::iterator i = find_dl_piece(download_state, index); auto const i = find_dl_piece(download_state, index);
TORRENT_ASSERT(i != m_downloads[download_state].end()); TORRENT_ASSERT(i != m_downloads[download_state].end());
TORRENT_ASSERT(i->locked == false); TORRENT_ASSERT(i->locked == false);
@ -1545,13 +1548,13 @@ namespace libtorrent
we_have(index); we_have(index);
} }
void piece_picker::we_dont_have(int index) void piece_picker::we_dont_have(int const index)
{ {
INVARIANT_CHECK; INVARIANT_CHECK;
TORRENT_ASSERT(index >= 0); TORRENT_ASSERT(index >= 0);
TORRENT_ASSERT(index < int(m_piece_map.size())); TORRENT_ASSERT(index < int(m_piece_map.size()));
piece_pos& p = m_piece_map[index]; piece_pos& p = m_piece_map[std::size_t(index)];
#ifdef TORRENT_PICKER_LOG #ifdef TORRENT_PICKER_LOG
std::cerr << "[" << this << "] " << "piece_picker::we_dont_have(" std::cerr << "[" << this << "] " << "piece_picker::we_dont_have("
@ -1565,8 +1568,7 @@ namespace libtorrent
int download_state = p.download_queue(); int download_state = p.download_queue();
if (download_state == piece_pos::piece_open) return; if (download_state == piece_pos::piece_open) return;
std::vector<downloading_piece>::iterator i auto const i = find_dl_piece(download_state, index);
= find_dl_piece(download_state, index);
if (i->passed_hash_check) if (i->passed_hash_check)
{ {
i->passed_hash_check = false; i->passed_hash_check = false;
@ -1609,7 +1611,7 @@ namespace libtorrent
// downloaded a piece, and that no further attempts // downloaded a piece, and that no further attempts
// to pick that piece should be made. The piece will // to pick that piece should be made. The piece will
// be removed from the available piece list. // be removed from the available piece list.
void piece_picker::we_have(int index) void piece_picker::we_have(int const index)
{ {
#ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS #ifdef TORRENT_EXPENSIVE_INVARIANT_CHECKS
INVARIANT_CHECK; INVARIANT_CHECK;
@ -1621,7 +1623,7 @@ namespace libtorrent
std::cerr << "[" << this << "] " << "piece_picker::we_have(" std::cerr << "[" << this << "] " << "piece_picker::we_have("
<< index << ")" << std::endl; << index << ")" << std::endl;
#endif #endif
piece_pos& p = m_piece_map[index]; piece_pos& p = m_piece_map[std::size_t(index)];
int const info_index = p.index; int const info_index = p.index;
int const priority = p.priority(this); int const priority = p.priority(this);
TORRENT_ASSERT(priority < int(m_priority_boundaries.size()) || m_dirty); TORRENT_ASSERT(priority < int(m_priority_boundaries.size()) || m_dirty);
@ -1631,8 +1633,7 @@ namespace libtorrent
int state = p.download_queue(); int state = p.download_queue();
if (state != piece_pos::piece_open) if (state != piece_pos::piece_open)
{ {
std::vector<downloading_piece>::iterator i auto const i = find_dl_piece(state, index);
= find_dl_piece(state, index);
TORRENT_ASSERT(i != m_downloads[state].end()); TORRENT_ASSERT(i != m_downloads[state].end());
// decrement num_passed here to compensate // decrement num_passed here to compensate
// for the unconditional increment further down // for the unconditional increment further down
@ -1929,7 +1930,7 @@ namespace libtorrent
INVARIANT_CHECK; INVARIANT_CHECK;
#endif #endif
TORRENT_ASSERT(num_blocks > 0); TORRENT_ASSERT(num_blocks > 0);
TORRENT_ASSERT(pieces.size() == m_piece_map.size()); TORRENT_ASSERT(pieces.size() == int(m_piece_map.size()));
TORRENT_ASSERT(!m_priority_boundaries.empty() || m_dirty); TORRENT_ASSERT(!m_priority_boundaries.empty() || m_dirty);
@ -2290,7 +2291,7 @@ get_out:
// this peer has, and can pick from. Cap the stack allocation // this peer has, and can pick from. Cap the stack allocation
// at 200 pieces. // at 200 pieces.
int partials_size = (std::min)(200, int( int partials_size = std::min(200, int(
m_downloads[piece_pos::piece_downloading].size() m_downloads[piece_pos::piece_downloading].size()
+ m_downloads[piece_pos::piece_full].size())); + m_downloads[piece_pos::piece_full].size()));
if (partials_size == 0) return ret; if (partials_size == 0) return ret;
@ -2340,14 +2341,10 @@ get_out:
} }
#endif #endif
for (std::vector<downloading_piece>::const_iterator i for (auto const& dp : m_downloads[piece_pos::piece_full])
= m_downloads[piece_pos::piece_full].begin()
, end(m_downloads[piece_pos::piece_full].end());
i != end; ++i)
{ {
if (c == partials_size) break; if (c == partials_size) break;
downloading_piece const& dp = *i;
TORRENT_ASSERT(dp.requested > 0); TORRENT_ASSERT(dp.requested > 0);
// this peer doesn't have this piece, try again // this peer doesn't have this piece, try again
if (!pieces[dp.index]) continue; if (!pieces[dp.index]) continue;
@ -2365,23 +2362,21 @@ get_out:
while (partials_size > 0) while (partials_size > 0)
{ {
pc.inc_stats_counter(counters::piece_picker_busy_loops); pc.inc_stats_counter(counters::piece_picker_busy_loops);
int piece = random(partials_size-1); int piece = int(random(partials_size - 1));
downloading_piece const* dp = partials[piece]; downloading_piece const* dp = partials[piece];
TORRENT_ASSERT(pieces[dp->index]); TORRENT_ASSERT(pieces[dp->index]);
TORRENT_ASSERT(piece_priority(dp->index) > 0); TORRENT_ASSERT(piece_priority(dp->index) > 0);
// fill in with blocks requested from other peers // fill in with blocks requested from other peers
// as backups // as backups
const int num_blocks_in_piece = blocks_in_piece(dp->index); int const num_blocks_in_piece = blocks_in_piece(dp->index);
TORRENT_ASSERT(dp->requested > 0); TORRENT_ASSERT(dp->requested > 0);
block_info const* binfo = blocks_for_piece(*dp); block_info const* binfo = blocks_for_piece(*dp);
for (int j = 0; j < num_blocks_in_piece; ++j) for (int j = 0; j < num_blocks_in_piece; ++j)
{ {
block_info const& info = binfo[j]; block_info const& info = binfo[j];
TORRENT_ASSERT(info.peer == nullptr TORRENT_ASSERT(info.peer == nullptr || info.peer->in_use);
|| static_cast<torrent_peer*>(info.peer)->in_use);
TORRENT_ASSERT(info.piece_index == dp->index); TORRENT_ASSERT(info.piece_index == dp->index);
if (info.state != block_info::state_requested if (info.state != block_info::state_requested || info.peer == peer)
|| info.peer == peer)
continue; continue;
temp.push_back(piece_block(dp->index, j)); temp.push_back(piece_block(dp->index, j));
} }
@ -2396,7 +2391,7 @@ get_out:
// the piece we picked only had blocks outstanding requested // the piece we picked only had blocks outstanding requested
// by ourself. Remove it and pick another one. // by ourself. Remove it and pick another one.
partials[piece] = partials[partials_size-1]; partials[piece] = partials[partials_size - 1];
--partials_size; --partials_size;
} }
@ -2477,7 +2472,7 @@ get_out:
{ {
TORRENT_ASSERT(index >= 0); TORRENT_ASSERT(index >= 0);
TORRENT_ASSERT(index < int(m_piece_map.size())); TORRENT_ASSERT(index < int(m_piece_map.size()));
piece_pos const& p = m_piece_map[index]; piece_pos const& p = m_piece_map[std::size_t(index)];
return p.index == piece_pos::we_have_index; return p.index == piece_pos::we_have_index;
} }
@ -2495,19 +2490,19 @@ get_out:
{ {
TORRENT_ASSERT(piece >= 0 && piece < int(m_piece_map.size())); TORRENT_ASSERT(piece >= 0 && piece < int(m_piece_map.size()));
return bitmask[piece] return bitmask[piece]
&& !m_piece_map[piece].have() && !m_piece_map[std::size_t(piece)].have()
&& !m_piece_map[piece].filtered(); && !m_piece_map[std::size_t(piece)].filtered();
} }
bool piece_picker::can_pick(int piece, bitfield const& bitmask) const bool piece_picker::can_pick(int piece, bitfield const& bitmask) const
{ {
TORRENT_ASSERT(piece >= 0 && piece < int(m_piece_map.size())); TORRENT_ASSERT(piece >= 0 && piece < int(m_piece_map.size()));
return bitmask[piece] return bitmask[piece]
&& !m_piece_map[piece].have() && !m_piece_map[std::size_t(piece)].have()
// TODO: when expanding pieces for cache stripe reasons, // TODO: when expanding pieces for cache stripe reasons,
// the !downloading condition doesn't make much sense // the !downloading condition doesn't make much sense
&& !m_piece_map[piece].downloading() && !m_piece_map[std::size_t(piece)].downloading()
&& !m_piece_map[piece].filtered(); && !m_piece_map[std::size_t(piece)].filtered();
} }
#if TORRENT_USE_INVARIANT_CHECKS #if TORRENT_USE_INVARIANT_CHECKS
@ -2538,7 +2533,7 @@ get_out:
// the first-fit range, which would be better // the first-fit range, which would be better
std::tuple<bool, bool, int, int> piece_picker::requested_from( std::tuple<bool, bool, int, int> piece_picker::requested_from(
piece_picker::downloading_piece const& p piece_picker::downloading_piece const& p
, int num_blocks_in_piece, torrent_peer* peer) const , int const num_blocks_in_piece, torrent_peer* peer) const
{ {
bool exclusive = true; bool exclusive = true;
bool exclusive_active = true; bool exclusive_active = true;
@ -2549,7 +2544,7 @@ get_out:
for (int j = 0; j < num_blocks_in_piece; ++j) for (int j = 0; j < num_blocks_in_piece; ++j)
{ {
piece_picker::block_info const& info = binfo[j]; piece_picker::block_info const& info = binfo[j];
TORRENT_ASSERT(info.peer == nullptr || static_cast<torrent_peer*>(info.peer)->in_use); TORRENT_ASSERT(info.peer == nullptr || info.peer->in_use);
TORRENT_ASSERT(info.piece_index == p.index); TORRENT_ASSERT(info.piece_index == p.index);
if (info.state == piece_picker::block_info::state_none) if (info.state == piece_picker::block_info::state_none)
{ {
@ -2858,7 +2853,7 @@ get_out:
} }
std::vector<piece_picker::downloading_piece>::iterator piece_picker::find_dl_piece( std::vector<piece_picker::downloading_piece>::iterator piece_picker::find_dl_piece(
int queue, int index) int const queue, int const index)
{ {
TORRENT_ASSERT(queue >= 0 && queue < piece_pos::num_download_categories); TORRENT_ASSERT(queue >= 0 && queue < piece_pos::num_download_categories);
downloading_piece cmp; downloading_piece cmp;
@ -2967,7 +2962,7 @@ get_out:
{ {
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
int state = m_piece_map[block.piece_index].download_queue(); int state = m_piece_map[block.piece_index].download_queue();
if (state == piece_pos::piece_open) return false; if (state == piece_pos::piece_open) return false;
@ -2985,7 +2980,7 @@ get_out:
{ {
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
if (m_piece_map[block.piece_index].index == piece_pos::we_have_index) return true; if (m_piece_map[block.piece_index].index == piece_pos::we_have_index) return true;
int state = m_piece_map[block.piece_index].download_queue(); int state = m_piece_map[block.piece_index].download_queue();
@ -3004,7 +2999,7 @@ get_out:
{ {
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
piece_pos const& p = m_piece_map[block.piece_index]; piece_pos const& p = m_piece_map[block.piece_index];
if (p.index == piece_pos::we_have_index) return true; if (p.index == piece_pos::we_have_index) return true;
@ -3028,11 +3023,11 @@ get_out:
<< block.piece_index << ", " << block.block_index << "} )" << std::endl; << block.piece_index << ", " << block.block_index << "} )" << std::endl;
#endif #endif
TORRENT_ASSERT(peer == nullptr || static_cast<torrent_peer*>(peer)->in_use); TORRENT_ASSERT(peer == nullptr || peer->in_use);
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
TORRENT_ASSERT(int(block.block_index) < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
TORRENT_ASSERT(!m_piece_map[block.piece_index].have()); TORRENT_ASSERT(!m_piece_map[block.piece_index].have());
piece_pos& p = m_piece_map[block.piece_index]; piece_pos& p = m_piece_map[block.piece_index];
@ -3051,7 +3046,7 @@ get_out:
if (prio >= 0 && !m_dirty) update(prio, p.index); if (prio >= 0 && !m_dirty) update(prio, p.index);
dlpiece_iter dp = add_download_piece(block.piece_index); auto const dp = add_download_piece(block.piece_index);
block_info* binfo = blocks_for_piece(*dp); block_info* binfo = blocks_for_piece(*dp);
block_info& info = binfo[block.block_index]; block_info& info = binfo[block.block_index];
TORRENT_ASSERT(info.piece_index == block.piece_index); TORRENT_ASSERT(info.piece_index == block.piece_index);
@ -3129,7 +3124,7 @@ get_out:
{ {
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
piece_pos const& p = m_piece_map[block.piece_index]; piece_pos const& p = m_piece_map[block.piece_index];
@ -3179,8 +3174,8 @@ get_out:
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
TORRENT_ASSERT(int(block.block_index) < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
// this is not valid for web peers // this is not valid for web peers
// TORRENT_ASSERT(peer != 0); // TORRENT_ASSERT(peer != 0);
@ -3198,7 +3193,7 @@ get_out:
// the piece priority was set to 0 // the piece priority was set to 0
if (prio >= 0 && !m_dirty) update(prio, p.index); if (prio >= 0 && !m_dirty) update(prio, p.index);
dlpiece_iter dp = add_download_piece(block.piece_index); auto const dp = add_download_piece(block.piece_index);
block_info* binfo = blocks_for_piece(*dp); block_info* binfo = blocks_for_piece(*dp);
block_info& info = binfo[block.block_index]; block_info& info = binfo[block.block_index];
TORRENT_ASSERT(&info >= &m_block_info[0]); TORRENT_ASSERT(&info >= &m_block_info[0]);
@ -3367,8 +3362,8 @@ get_out:
TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.piece_index >= 0);
TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.block_index >= 0);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
TORRENT_ASSERT(int(block.block_index) < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
piece_pos& p = m_piece_map[block.piece_index]; piece_pos& p = m_piece_map[block.piece_index];
@ -3430,8 +3425,8 @@ get_out:
TORRENT_ASSERT(peer == nullptr || static_cast<torrent_peer*>(peer)->in_use); TORRENT_ASSERT(peer == nullptr || static_cast<torrent_peer*>(peer)->in_use);
TORRENT_ASSERT(block.piece_index >= 0); TORRENT_ASSERT(block.piece_index >= 0);
TORRENT_ASSERT(block.block_index >= 0); TORRENT_ASSERT(block.block_index >= 0);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
TORRENT_ASSERT(int(block.block_index) < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
piece_pos& p = m_piece_map[block.piece_index]; piece_pos& p = m_piece_map[block.piece_index];
@ -3450,7 +3445,7 @@ get_out:
p.download_state = piece_pos::piece_downloading; p.download_state = piece_pos::piece_downloading;
if (prio >= 0 && !m_dirty) update(prio, p.index); if (prio >= 0 && !m_dirty) update(prio, p.index);
dlpiece_iter dp = add_download_piece(block.piece_index); auto const dp = add_download_piece(block.piece_index);
block_info* binfo = blocks_for_piece(*dp); block_info* binfo = blocks_for_piece(*dp);
block_info& info = binfo[block.block_index]; block_info& info = binfo[block.block_index];
TORRENT_ASSERT(&info >= &m_block_info[0]); TORRENT_ASSERT(&info >= &m_block_info[0]);
@ -3576,8 +3571,8 @@ get_out:
TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index); TORRENT_ASSERT(block.block_index != piece_block::invalid.block_index);
TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index); TORRENT_ASSERT(block.piece_index != piece_block::invalid.piece_index);
TORRENT_ASSERT(block.piece_index < m_piece_map.size()); TORRENT_ASSERT(block.piece_index < int(m_piece_map.size()));
TORRENT_ASSERT(int(block.block_index) < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
int state = m_piece_map[block.piece_index].download_queue(); int state = m_piece_map[block.piece_index].download_queue();
if (state == piece_pos::piece_open) return; if (state == piece_pos::piece_open) return;
@ -3607,7 +3602,7 @@ get_out:
if (info.peer == peer) info.peer = nullptr; if (info.peer == peer) info.peer = nullptr;
TORRENT_ASSERT(info.peers.size() == info.num_peers); TORRENT_ASSERT(info.peers.size() == info.num_peers);
TORRENT_ASSERT(int(block.block_index) < blocks_in_piece(block.piece_index)); TORRENT_ASSERT(block.block_index < blocks_in_piece(block.piece_index));
// if there are other peers, leave the block requested // if there are other peers, leave the block requested
if (info.num_peers > 0) return; if (info.num_peers > 0) return;

View File

@ -40,7 +40,7 @@ int receive_buffer::max_receive() const
return int(m_recv_buffer.size() - m_recv_end); return int(m_recv_buffer.size() - m_recv_end);
} }
span<char> receive_buffer::reserve(int size) span<char> receive_buffer::reserve(int const size)
{ {
INVARIANT_CHECK; INVARIANT_CHECK;
TORRENT_ASSERT(size > 0); TORRENT_ASSERT(size > 0);
@ -49,7 +49,7 @@ span<char> receive_buffer::reserve(int size)
// normalize() must be called before receiving more data // normalize() must be called before receiving more data
TORRENT_ASSERT(m_recv_start == 0); TORRENT_ASSERT(m_recv_start == 0);
if (m_recv_buffer.size() < m_recv_end + size) if (int(m_recv_buffer.size()) < m_recv_end + size)
{ {
int const new_size = std::max(m_recv_end + size, m_packet_size); int const new_size = std::max(m_recv_end + size, m_packet_size);
buffer new_buffer(new_size buffer new_buffer(new_size
@ -144,7 +144,7 @@ span<char const> receive_buffer::get() const
return span<char const>(); return span<char const>();
} }
TORRENT_ASSERT(m_recv_start + m_recv_pos <= m_recv_buffer.size()); TORRENT_ASSERT(m_recv_start + m_recv_pos <= int(m_recv_buffer.size()));
return span<char const>(m_recv_buffer).subspan(m_recv_start, m_recv_pos); return span<char const>(m_recv_buffer).subspan(m_recv_start, m_recv_pos);
} }
@ -169,7 +169,7 @@ span<char> receive_buffer::mutable_buffer(int const bytes)
// in the receive buffer that have been parsed and processed. // in the receive buffer that have been parsed and processed.
// it may also shrink the size of the buffer allocation if we haven't been using // it may also shrink the size of the buffer allocation if we haven't been using
// enough of it lately. // enough of it lately.
void receive_buffer::normalize(int force_shrink) void receive_buffer::normalize(int const force_shrink)
{ {
INVARIANT_CHECK; INVARIANT_CHECK;
TORRENT_ASSERT(m_recv_end >= m_recv_start); TORRENT_ASSERT(m_recv_end >= m_recv_start);
@ -178,7 +178,7 @@ void receive_buffer::normalize(int force_shrink)
// if the running average drops below half of the current buffer size, // if the running average drops below half of the current buffer size,
// reallocate a smaller one. // reallocate a smaller one.
bool const shrink_buffer = m_recv_buffer.size() / 2 > m_watermark.mean() bool const shrink_buffer = int(m_recv_buffer.size()) / 2 > m_watermark.mean()
&& m_watermark.mean() > (m_recv_end - m_recv_start); && m_watermark.mean() > (m_recv_end - m_recv_start);
span<char const> bytes_to_shift( span<char const> bytes_to_shift(
@ -212,10 +212,10 @@ void receive_buffer::normalize(int force_shrink)
#endif #endif
} }
void receive_buffer::reset(int packet_size) void receive_buffer::reset(int const packet_size)
{ {
INVARIANT_CHECK; INVARIANT_CHECK;
TORRENT_ASSERT(m_recv_buffer.size() >= m_recv_end); TORRENT_ASSERT(int(m_recv_buffer.size()) >= m_recv_end);
TORRENT_ASSERT(packet_size > 0); TORRENT_ASSERT(packet_size > 0);
if (m_recv_end > m_packet_size) if (m_recv_end > m_packet_size)
{ {

View File

@ -103,7 +103,7 @@ void resolve_links::match(std::shared_ptr<const torrent_info> const& ti
int our_piece = m_torrent_file->files().map_file( int our_piece = m_torrent_file->files().map_file(
iter->second, 0, 0).piece; iter->second, 0, 0).piece;
int num_pieces = (file_size + piece_size - 1) / piece_size; int num_pieces = int((file_size + piece_size - 1) / piece_size);
bool match = true; bool match = true;
for (int p = 0; p < num_pieces; ++p, ++their_piece, ++our_piece) for (int p = 0; p < num_pieces; ++p, ++their_piece, ++our_piece)

View File

@ -571,7 +571,7 @@ namespace libtorrent
void session_handle::dht_put_item(std::array<char, 32> key void session_handle::dht_put_item(std::array<char, 32> key
, std::function<void(entry&, std::array<char,64>& , std::function<void(entry&, std::array<char,64>&
, std::uint64_t&, std::string const&)> cb , std::int64_t&, std::string const&)> cb
, std::string salt) , std::string salt)
{ {
#ifndef TORRENT_DISABLE_DHT #ifndef TORRENT_DISABLE_DHT

View File

@ -598,15 +598,17 @@ namespace aux {
// this specific output is parsed by tools/parse_session_stats.py // this specific output is parsed by tools/parse_session_stats.py
// if this is changed, that parser should also be changed // if this is changed, that parser should also be changed
std::string stats_header = "session stats header: ";
std::vector<stats_metric> stats = session_stats_metrics(); std::vector<stats_metric> stats = session_stats_metrics();
std::sort(stats.begin(), stats.end() std::sort(stats.begin(), stats.end()
, [] (stats_metric const& lhs, stats_metric const& rhs) , [] (stats_metric const& lhs, stats_metric const& rhs)
{ return lhs.value_index < rhs.value_index; }); { return lhs.value_index < rhs.value_index; });
for (int i = 0; i < stats.size(); ++i) std::string stats_header = "session stats header: ";
bool first = true;
for (auto const& s : stats)
{ {
if (i > 0) stats_header += ", "; if (!first) stats_header += ", ";
stats_header += stats[i].name; stats_header += s.name;
first = false;
} }
m_alerts.emplace_alert<log_alert>(stats_header.c_str()); m_alerts.emplace_alert<log_alert>(stats_header.c_str());
} }
@ -1756,11 +1758,11 @@ namespace aux {
// of a new socket failing to bind due to a conflict with a stale socket // of a new socket failing to bind due to a conflict with a stale socket
std::vector<listen_endpoint_t> eps; std::vector<listen_endpoint_t> eps;
for (int i = 0; i < m_listen_interfaces.size(); ++i) for (auto const& iface : m_listen_interfaces)
{ {
std::string const& device = m_listen_interfaces[i].device; std::string const& device = iface.device;
int const port = m_listen_interfaces[i].port; int const port = iface.port;
bool const ssl = m_listen_interfaces[i].ssl; bool const ssl = iface.ssl;
#ifndef TORRENT_USE_OPENSSL #ifndef TORRENT_USE_OPENSSL
if (ssl) if (ssl)
@ -1817,13 +1819,13 @@ namespace aux {
continue; continue;
} }
for (int k = 0; k < int(ifs.size()); ++k) for (auto const& ipface : ifs)
{ {
// we're looking for a specific interface, and its address // we're looking for a specific interface, and its address
// (which must be of the same family as the address we're // (which must be of the same family as the address we're
// connecting to) // connecting to)
if (device != ifs[k].name) continue; if (device != ipface.name) continue;
eps.emplace_back(ifs[k].interface_address, port, device, ssl); eps.emplace_back(ipface.interface_address, port, device, ssl);
} }
} }
} }
@ -1834,9 +1836,12 @@ namespace aux {
{ {
// TODO notify interested parties of this socket's demise // TODO notify interested parties of this socket's demise
#ifndef TORRENT_DISABLE_LOGGING #ifndef TORRENT_DISABLE_LOGGING
session_log("Closing listen socket for %s on device \"%s\"" if (should_log())
, print_endpoint(remove_iter->local_endpoint).c_str() {
, remove_iter->device.c_str()); session_log("Closing listen socket for %s on device \"%s\""
, print_endpoint(remove_iter->local_endpoint).c_str()
, remove_iter->device.c_str());
}
#endif #endif
if (remove_iter->sock) remove_iter->sock->close(ec); if (remove_iter->sock) remove_iter->sock->close(ec);
if (remove_iter->udp_sock) remove_iter->udp_sock->close(); if (remove_iter->udp_sock) remove_iter->udp_sock->close();
@ -5195,10 +5200,8 @@ namespace aux {
std::vector<std::pair<std::string, int>> nodes; std::vector<std::pair<std::string, int>> nodes;
parse_comma_separated_string_port(node_list, nodes); parse_comma_separated_string_port(node_list, nodes);
for (int i = 0; i < nodes.size(); ++i) for (auto const& n : nodes)
{ add_dht_router(n);
add_dht_router(nodes[i]);
}
#endif #endif
} }
@ -5691,7 +5694,7 @@ namespace aux {
void put_mutable_callback(dht::item& i void put_mutable_callback(dht::item& i
, std::function<void(entry&, std::array<char, 64>& , std::function<void(entry&, std::array<char, 64>&
, std::uint64_t&, std::string const&)> cb) , std::int64_t&, std::string const&)> cb)
{ {
entry value = i.value(); entry value = i.value();
dht::signature sig = i.sig(); dht::signature sig = i.sig();
@ -5727,7 +5730,7 @@ namespace aux {
void session_impl::dht_put_mutable_item(std::array<char, 32> key void session_impl::dht_put_mutable_item(std::array<char, 32> key
, std::function<void(entry&, std::array<char,64>& , std::function<void(entry&, std::array<char,64>&
, std::uint64_t&, std::string const&)> cb , std::int64_t&, std::string const&)> cb
, std::string salt) , std::string salt)
{ {
if (!m_dht) return; if (!m_dht) return;
@ -5960,7 +5963,7 @@ namespace aux {
void session_impl::update_queued_disk_bytes() void session_impl::update_queued_disk_bytes()
{ {
std::uint64_t cache_size = m_settings.get_int(settings_pack::cache_size); int const cache_size = m_settings.get_int(settings_pack::cache_size);
if (m_settings.get_int(settings_pack::max_queued_disk_bytes) / 16 / 1024 if (m_settings.get_int(settings_pack::max_queued_disk_bytes) / 16 / 1024
> cache_size / 2 > cache_size / 2
&& cache_size > 5 && cache_size > 5

View File

@ -533,7 +533,7 @@ namespace libtorrent
std::vector<stats_metric> session_stats_metrics() std::vector<stats_metric> session_stats_metrics()
{ {
std::vector<stats_metric> stats; std::vector<stats_metric> stats;
const int num = sizeof(metrics)/sizeof(metrics[0]); int const num = sizeof(metrics) / sizeof(metrics[0]);
stats.resize(num); stats.resize(num);
for (int i = 0; i < num; ++i) for (int i = 0; i < num; ++i)
{ {

View File

@ -37,6 +37,7 @@ POSSIBILITY OF SUCH DAMAGE.
#include "libtorrent/aux_/session_impl.hpp" #include "libtorrent/aux_/session_impl.hpp"
#include <algorithm> #include <algorithm>
#include <array>
namespace { namespace {
@ -98,8 +99,8 @@ namespace libtorrent
using aux::session_impl; using aux::session_impl;
str_setting_entry_t str_settings[settings_pack::num_string_settings] = std::array<str_setting_entry_t, settings_pack::num_string_settings> str_settings =
{ {{
SET(user_agent, "libtorrent/" LIBTORRENT_VERSION, &session_impl::update_user_agent), SET(user_agent, "libtorrent/" LIBTORRENT_VERSION, &session_impl::update_user_agent),
SET(announce_ip, nullptr, nullptr), SET(announce_ip, nullptr, nullptr),
SET(mmap_cache, nullptr, nullptr), SET(mmap_cache, nullptr, nullptr),
@ -116,10 +117,10 @@ namespace libtorrent
SET(i2p_hostname, "", &session_impl::update_i2p_bridge), SET(i2p_hostname, "", &session_impl::update_i2p_bridge),
SET(peer_fingerprint, "-LT1200-", &session_impl::update_peer_fingerprint), SET(peer_fingerprint, "-LT1200-", &session_impl::update_peer_fingerprint),
SET(dht_bootstrap_nodes, "dht.libtorrent.org:25401", &session_impl::update_dht_bootstrap_nodes) SET(dht_bootstrap_nodes, "dht.libtorrent.org:25401", &session_impl::update_dht_bootstrap_nodes)
}; }};
bool_setting_entry_t bool_settings[settings_pack::num_bool_settings] = std::array<bool_setting_entry_t, settings_pack::num_bool_settings> bool_settings =
{ {{
SET(allow_multiple_connections_per_ip, false, nullptr), SET(allow_multiple_connections_per_ip, false, nullptr),
DEPRECATED_SET(ignore_limits_on_local_network, true, &session_impl::update_ignore_rate_limits_on_local_network), DEPRECATED_SET(ignore_limits_on_local_network, true, &session_impl::update_ignore_rate_limits_on_local_network),
SET(send_redundant_have, true, nullptr), SET(send_redundant_have, true, nullptr),
@ -188,10 +189,10 @@ namespace libtorrent
SET(proxy_peer_connections, true, nullptr), SET(proxy_peer_connections, true, nullptr),
SET(auto_sequential, true, &session_impl::update_auto_sequential), SET(auto_sequential, true, &session_impl::update_auto_sequential),
SET(proxy_tracker_connections, true, nullptr), SET(proxy_tracker_connections, true, nullptr),
}; }};
int_setting_entry_t int_settings[settings_pack::num_int_settings] = std::array<int_setting_entry_t, settings_pack::num_int_settings> int_settings =
{ {{
SET(tracker_completion_timeout, 30, nullptr), SET(tracker_completion_timeout, 30, nullptr),
SET(tracker_receive_timeout, 10, nullptr), SET(tracker_receive_timeout, 10, nullptr),
SET(stop_tracker_timeout, 5, nullptr), SET(stop_tracker_timeout, 5, nullptr),
@ -319,7 +320,7 @@ namespace libtorrent
SET(proxy_port, 0, &session_impl::update_proxy), SET(proxy_port, 0, &session_impl::update_proxy),
SET(i2p_port, 0, &session_impl::update_i2p_bridge), SET(i2p_port, 0, &session_impl::update_i2p_bridge),
SET(cache_size_volatile, 256, nullptr) SET(cache_size_volatile, 256, nullptr)
}; }};
#undef SET #undef SET
#undef SET_DEPRECATED #undef SET_DEPRECATED
@ -328,20 +329,20 @@ namespace libtorrent
int setting_by_name(std::string const& key) int setting_by_name(std::string const& key)
{ {
for (int k = 0; k < sizeof(str_settings)/sizeof(str_settings[0]); ++k) for (std::size_t k = 0; k < str_settings.size(); ++k)
{ {
if (key != str_settings[k].name) continue; if (key != str_settings[k].name) continue;
return settings_pack::string_type_base + k; return settings_pack::string_type_base + int(k);
} }
for (int k = 0; k < sizeof(int_settings)/sizeof(int_settings[0]); ++k) for (std::size_t k = 0; k < int_settings.size(); ++k)
{ {
if (key != int_settings[k].name) continue; if (key != int_settings[k].name) continue;
return settings_pack::int_type_base + k; return settings_pack::int_type_base + int(k);
} }
for (int k = 0; k < sizeof(bool_settings)/sizeof(bool_settings[0]); ++k) for (std::size_t k = 0; k < bool_settings.size(); ++k)
{ {
if (key != bool_settings[k].name) continue; if (key != bool_settings[k].name) continue;
return settings_pack::bool_type_base + k; return settings_pack::bool_type_base + int(k);
} }
return -1; return -1;
} }
@ -377,27 +378,27 @@ namespace libtorrent
case bdecode_node::int_t: case bdecode_node::int_t:
{ {
bool found = false; bool found = false;
for (int k = 0; k < sizeof(int_settings) / sizeof(int_settings[0]); ++k) for (std::size_t k = 0; k < int_settings.size(); ++k)
{ {
if (key != int_settings[k].name) continue; if (key != int_settings[k].name) continue;
pack.set_int(settings_pack::int_type_base + k, val.int_value()); pack.set_int(settings_pack::int_type_base + int(k), int(val.int_value()));
found = true; found = true;
break; break;
} }
if (found) continue; if (found) continue;
for (int k = 0; k < sizeof(bool_settings) / sizeof(bool_settings[0]); ++k) for (std::size_t k = 0; k < bool_settings.size(); ++k)
{ {
if (key != bool_settings[k].name) continue; if (key != bool_settings[k].name) continue;
pack.set_bool(settings_pack::bool_type_base + k, val.int_value() != 0); pack.set_bool(settings_pack::bool_type_base + int(k), val.int_value() != 0);
break; break;
} }
} }
break; break;
case bdecode_node::string_t: case bdecode_node::string_t:
for (int k = 0; k < sizeof(str_settings) / sizeof(str_settings[0]); ++k) for (std::size_t k = 0; k < str_settings.size(); ++k)
{ {
if (key != str_settings[k].name) continue; if (key != str_settings[k].name) continue;
pack.set_str(settings_pack::string_type_base + k, val.string_value().to_string()); pack.set_str(settings_pack::string_type_base + int(k), val.string_value().to_string());
break; break;
} }
break; break;

View File

@ -1126,7 +1126,7 @@ namespace libtorrent
TORRENT_ASSERT(files.is_loaded()); TORRENT_ASSERT(files.is_loaded());
// find the file iterator and file offset // find the file iterator and file offset
std::uint64_t torrent_offset = piece * std::uint64_t(files.piece_length()) + offset; std::int64_t const torrent_offset = piece * std::int64_t(files.piece_length()) + offset;
int file_index = files.file_index_at_offset(torrent_offset); int file_index = files.file_index_at_offset(torrent_offset);
TORRENT_ASSERT(torrent_offset >= files.file_offset(file_index)); TORRENT_ASSERT(torrent_offset >= files.file_offset(file_index));
TORRENT_ASSERT(torrent_offset < files.file_offset(file_index) + files.file_size(file_index)); TORRENT_ASSERT(torrent_offset < files.file_offset(file_index) + files.file_size(file_index));
@ -1143,7 +1143,7 @@ namespace libtorrent
// advance_bufs()) // advance_bufs())
TORRENT_ALLOCA(current_buf, file::iovec_t, bufs.size()); TORRENT_ALLOCA(current_buf, file::iovec_t, bufs.size());
copy_bufs(bufs, size, current_buf); copy_bufs(bufs, size, current_buf);
TORRENT_ASSERT(count_bufs(current_buf, size) == bufs.size()); TORRENT_ASSERT(count_bufs(current_buf, size) == int(bufs.size()));
TORRENT_ALLOCA(tmp_buf, file::iovec_t, bufs.size()); TORRENT_ALLOCA(tmp_buf, file::iovec_t, bufs.size());
@ -1188,7 +1188,7 @@ namespace libtorrent
bytes_left -= bytes_transferred; bytes_left -= bytes_transferred;
file_offset += bytes_transferred; file_offset += bytes_transferred;
TORRENT_ASSERT(count_bufs(current_buf, bytes_left) <= bufs.size()); TORRENT_ASSERT(count_bufs(current_buf, bytes_left) <= int(bufs.size()));
// if the file operation returned 0, we've hit end-of-file. We're done // if the file operation returned 0, we've hit end-of-file. We're done
if (bytes_transferred == 0) if (bytes_transferred == 0)

View File

@ -206,7 +206,7 @@ namespace libtorrent
// the number of dots we've added // the number of dots we've added
char num_dots = 0; char num_dots = 0;
bool found_extension = false; bool found_extension = false;
for (int i = 0; i < element.size(); ++i) for (std::size_t i = 0; i < element.size(); ++i)
{ {
if (element[i] == '/' if (element[i] == '/'
|| element[i] == '\\' || element[i] == '\\'
@ -251,7 +251,7 @@ namespace libtorrent
else else
{ {
path += element[i]; path += element[i];
path += element[i+1]; path += element[i + 1];
last_len = 2; last_len = 2;
} }
i += 1; i += 1;
@ -276,8 +276,8 @@ namespace libtorrent
else else
{ {
path += element[i]; path += element[i];
path += element[i+1]; path += element[i + 1];
path += element[i+2]; path += element[i + 2];
last_len = 3; last_len = 3;
} }
i += 2; i += 2;
@ -286,16 +286,16 @@ namespace libtorrent
{ {
// 4 bytes // 4 bytes
if (element.size() - i < 4 if (element.size() - i < 4
|| (element[i+1] & 0xc0) != 0x80 || (element[i + 1] & 0xc0) != 0x80
|| (element[i+2] & 0xc0) != 0x80 || (element[i + 2] & 0xc0) != 0x80
|| (element[i+3] & 0xc0) != 0x80 || (element[i + 3] & 0xc0) != 0x80
) )
{ {
path += '_'; path += '_';
last_len = 1; last_len = 1;
} }
else if ((element[i] & 0x07) == 0 else if ((element[i] & 0x07) == 0
&& (element[i+1] & 0x3f) == 0) && (element[i + 1] & 0x3f) == 0)
{ {
// overlong sequences are invalid // overlong sequences are invalid
path += '_'; path += '_';
@ -304,9 +304,9 @@ namespace libtorrent
else else
{ {
path += element[i]; path += element[i];
path += element[i+1]; path += element[i + 1];
path += element[i+2]; path += element[i + 2];
path += element[i+3]; path += element[i + 3];
last_len = 4; last_len = 4;
} }
i += 3; i += 3;
@ -331,8 +331,8 @@ namespace libtorrent
#endif #endif
{ {
int dot = -1; int dot = -1;
for (int j = int(element.size())-1; for (int j = int(element.size()) - 1;
j > (std::max)(int(element.size() - 10), i); --j) j > std::max(int(element.size()) - 10, int(i)); --j)
{ {
if (element[j] != '.') continue; if (element[j] != '.') continue;
dot = j; dot = j;
@ -341,14 +341,15 @@ namespace libtorrent
// there is no extension // there is no extension
if (dot == -1) break; if (dot == -1) break;
found_extension = true; found_extension = true;
i = dot - 1; TORRENT_ASSERT(dot > 0);
i = std::size_t(dot - 1);
} }
} }
if (added == num_dots && added <= 2) if (added == num_dots && added <= 2)
{ {
// revert everything // revert everything
path.erase(path.end()-added-added_separator, path.end()); path.erase(path.end() - added - added_separator, path.end());
return; return;
} }
@ -365,7 +366,7 @@ namespace libtorrent
if (added == 0 && added_separator) if (added == 0 && added_separator)
{ {
// remove the separator added at the beginning // remove the separator added at the beginning
path.erase(path.end()-1); path.erase(path.end() - 1);
return; return;
} }
#endif #endif
@ -528,7 +529,7 @@ namespace libtorrent
file_flags &= ~file_storage::flag_symlink; file_flags &= ~file_storage::flag_symlink;
} }
if (filename_len > path.length() if (filename_len > int(path.length())
|| path.compare(path.size() - filename_len, filename_len, filename || path.compare(path.size() - filename_len, filename_len, filename
, filename_len) != 0) , filename_len) != 0)
{ {
@ -666,11 +667,11 @@ namespace libtorrent
const_cast<file_storage&>(*m_orig_files).apply_pointer_offset(offset); const_cast<file_storage&>(*m_orig_files).apply_pointer_offset(offset);
#ifndef TORRENT_DISABLE_MUTABLE_TORRENTS #ifndef TORRENT_DISABLE_MUTABLE_TORRENTS
for (int i = 0; i < m_collections.size(); ++i) for (auto& c : m_collections)
m_collections[i].first += offset; c.first += offset;
for (int i = 0; i < m_similar_torrents.size(); ++i) for (auto& st : m_similar_torrents)
m_similar_torrents[i] += offset; st += offset;
#endif #endif
if (m_info_dict) if (m_info_dict)
@ -1615,11 +1616,11 @@ namespace libtorrent
#ifndef TORRENT_DISABLE_MUTABLE_TORRENTS #ifndef TORRENT_DISABLE_MUTABLE_TORRENTS
ret.reserve(m_similar_torrents.size() + m_owned_similar_torrents.size()); ret.reserve(m_similar_torrents.size() + m_owned_similar_torrents.size());
for (int i = 0; i < m_similar_torrents.size(); ++i) for (auto const& st : m_similar_torrents)
ret.push_back(sha1_hash(m_similar_torrents[i])); ret.push_back(sha1_hash(st));
for (int i = 0; i < m_owned_similar_torrents.size(); ++i) for (auto const& st : m_owned_similar_torrents)
ret.push_back(m_owned_similar_torrents[i]); ret.push_back(st);
#endif #endif
return ret; return ret;
@ -1631,11 +1632,11 @@ namespace libtorrent
#ifndef TORRENT_DISABLE_MUTABLE_TORRENTS #ifndef TORRENT_DISABLE_MUTABLE_TORRENTS
ret.reserve(m_collections.size() + m_owned_collections.size()); ret.reserve(m_collections.size() + m_owned_collections.size());
for (int i = 0; i < m_collections.size(); ++i) for (auto const& c : m_collections)
ret.push_back(std::string(m_collections[i].first, m_collections[i].second)); ret.push_back(std::string(c.first, c.second));
for (int i = 0; i < m_owned_collections.size(); ++i) for (auto const& c : m_owned_collections)
ret.push_back(m_owned_collections[i]); ret.push_back(c);
#endif // TORRENT_DISABLE_MUTABLE_TORRENTS #endif // TORRENT_DISABLE_MUTABLE_TORRENTS
return ret; return ret;

View File

@ -387,7 +387,7 @@ void web_peer_connection::write_request(peer_request const& r)
file_request_t file_req; file_request_t file_req;
file_req.file_index = f.file_index; file_req.file_index = f.file_index;
file_req.start = f.offset; file_req.start = f.offset;
file_req.length = f.size; file_req.length = int(f.size);
if (info.orig_files().pad_file_at(f.file_index)) if (info.orig_files().pad_file_at(f.file_index))
{ {
@ -542,7 +542,7 @@ bool web_peer_connection::received_invalid_data(int index, bool single_peer)
// assume the web seed has a different copy of this specific file // assume the web seed has a different copy of this specific file
// than what we expect, and pretend not to have it. // than what we expect, and pretend not to have it.
int fi = files[0].file_index; int fi = files[0].file_index;
int first_piece = fs.file_offset(fi) / fs.piece_length(); int first_piece = int(fs.file_offset(fi) / fs.piece_length());
// one past last piece // one past last piece
int end_piece = int((fs.file_offset(fi) + fs.file_size(fi) + 1) / fs.piece_length()); int end_piece = int((fs.file_offset(fi) + fs.file_size(fi) + 1) / fs.piece_length());
for (int i = first_piece; i < end_piece; ++i) for (int i = first_piece; i < end_piece; ++i)
@ -744,7 +744,7 @@ void web_peer_connection::on_receive(error_code const& error
} }
TORRENT_ASSERT(recv_buffer.empty() || recv_buffer[0] == 'H'); TORRENT_ASSERT(recv_buffer.empty() || recv_buffer[0] == 'H');
TORRENT_ASSERT(recv_buffer.size() <= m_recv_buffer.packet_size()); TORRENT_ASSERT(int(recv_buffer.size()) <= m_recv_buffer.packet_size());
// this means the entire status line hasn't been received yet // this means the entire status line hasn't been received yet
if (m_parser.status_code() == -1) if (m_parser.status_code() == -1)
@ -915,7 +915,7 @@ void web_peer_connection::on_receive(error_code const& error
received_bytes(0, header_size - m_partial_chunk_header); received_bytes(0, header_size - m_partial_chunk_header);
m_partial_chunk_header = 0; m_partial_chunk_header = 0;
TORRENT_ASSERT(chunk_size != 0 TORRENT_ASSERT(chunk_size != 0
|| chunk_start.size() <= header_size || chunk_start[header_size] == 'H'); || int(chunk_start.size()) <= header_size || chunk_start[header_size] == 'H');
TORRENT_ASSERT(m_body_start + m_chunk_pos < INT_MAX); TORRENT_ASSERT(m_body_start + m_chunk_pos < INT_MAX);
m_chunk_pos += chunk_size; m_chunk_pos += chunk_size;
recv_buffer = recv_buffer.subspan(header_size); recv_buffer = recv_buffer.subspan(header_size);
@ -1141,9 +1141,9 @@ void web_peer_connection::handle_padfile()
while (file_size > 0) while (file_size > 0)
{ {
peer_request const front_request = m_requests.front(); peer_request const front_request = m_requests.front();
TORRENT_ASSERT(m_piece.size() < front_request.length); TORRENT_ASSERT(int(m_piece.size()) < front_request.length);
int pad_size = int((std::min)(file_size int pad_size = int(std::min(file_size
, std::int64_t(front_request.length - m_piece.size()))); , std::int64_t(front_request.length - m_piece.size())));
TORRENT_ASSERT(pad_size > 0); TORRENT_ASSERT(pad_size > 0);
file_size -= pad_size; file_size -= pad_size;

View File

@ -115,7 +115,7 @@ alert* wait_for_alert(lt::session& s, int alert_type)
} }
void put_string(entry& e, std::array<char, 64>& sig void put_string(entry& e, std::array<char, 64>& sig
, std::uint64_t& seq , std::int64_t& seq
, std::string const& salt , std::string const& salt
, std::array<char, 32> const& pk , std::array<char, 32> const& pk
, std::array<char, 64> const& sk , std::array<char, 64> const& sk
@ -411,4 +411,3 @@ int main(int argc, char* argv[])
} }
#endif #endif