From 70decc1d9dfbdc46112c29fdf38f829d34f6e867 Mon Sep 17 00:00:00 2001 From: tearfur <46261767+tearfur@users.noreply.github.com> Date: Tue, 27 Jun 2023 10:17:32 +0800 Subject: [PATCH] perf: improve IPv4 `tr_address` comparison (#5651) --- libtransmission/net.cc | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/libtransmission/net.cc b/libtransmission/net.cc index 9aeafa010..cfb9c1046 100644 --- a/libtransmission/net.cc +++ b/libtransmission/net.cc @@ -597,7 +597,9 @@ int tr_address::compare(tr_address const& that) const noexcept // <=> return this->is_ipv4() ? 1 : -1; } - return this->is_ipv4() ? memcmp(&this->addr.addr4, &that.addr.addr4, sizeof(this->addr.addr4)) : + // in_addr_t is by definition uint32_t, so we convert it to int64_t, + // the smallest signed integer type that can contain all values of uint32_t. + return this->is_ipv4() ? static_cast(int64_t{ ntohl(this->addr.addr4.s_addr) } - ntohl(that.addr.addr4.s_addr)) : memcmp(&this->addr.addr6.s6_addr, &that.addr.addr6.s6_addr, sizeof(this->addr.addr6.s6_addr)); }