diff options
| author | 2022-11-24 19:16:25 +0000 | |
|---|---|---|
| committer | 2022-11-24 19:16:25 +0000 | |
| commit | b045f49afbb7e0b0af7bae84f075d3e0660b39e6 (patch) | |
| tree | 390de1d1664cb157b0ce4c1ee2d266a55733efaa /src/socket.cpp | |
| parent | Use string_view in IsNick/IsIdent/IsChannel. (diff) | |
| parent | Add a workaround for the replies API not working with a cap reference. (diff) | |
Merge branch 'insp3' into master.
Diffstat (limited to 'src/socket.cpp')
| -rw-r--r-- | src/socket.cpp | 12 |
1 files changed, 11 insertions, 1 deletions
diff --git a/src/socket.cpp b/src/socket.cpp index ed6f185bc..bb2fb6b17 100644 --- a/src/socket.cpp +++ b/src/socket.cpp @@ -406,16 +406,19 @@ std::string irc::sockets::cidr_mask::str() const unsigned char* base; size_t len; + unsigned char maxlen; switch (type) { case AF_INET: base = reinterpret_cast<unsigned char*>(&sa.in4.sin_addr); len = 4; + maxlen = 32; break; case AF_INET6: base = reinterpret_cast<unsigned char*>(&sa.in6.sin6_addr); len = 16; + maxlen = 128; break; case AF_UNIX: @@ -429,7 +432,14 @@ std::string irc::sockets::cidr_mask::str() const } memcpy(base, bits, len); - return sa.addr() + "/" + ConvToStr(length); + + std::string value = sa.addr(); + if (length < maxlen) + { + value.push_back('/'); + value.append(ConvToStr(static_cast<uint16_t>(length))); + } + return value; } bool irc::sockets::cidr_mask::operator==(const cidr_mask& other) const |
