Skip to content

Commit 0733bb6

Browse files
committed
SockAddr: factorize setters
1 parent 131073e commit 0733bb6

File tree

1 file changed

+15
-15
lines changed

1 file changed

+15
-15
lines changed

include/opendht/sockaddr.h

+15-15
Original file line numberDiff line numberDiff line change
@@ -49,22 +49,15 @@ class OPENDHT_PUBLIC SockAddr {
4949
public:
5050
SockAddr() {}
5151
SockAddr(const SockAddr& o) {
52-
len = o.len;
53-
if (len) {
54-
addr.reset((sockaddr*)std::malloc(len));
55-
std::memcpy((uint8_t*)addr.get(), (const uint8_t*)o.get(), len);
56-
} else
57-
addr.reset();
52+
set(o.get(), o.getLength());
5853
}
5954
SockAddr(SockAddr&& o) : len(o.len), addr(std::move(o.addr)) {
6055
o.len = 0;
6156
}
6257
SockAddr(const sockaddr* sa, socklen_t length) {
6358
if (length > sizeof(sockaddr_storage))
6459
throw std::runtime_error("Socket address length is too large");
65-
len = length;
66-
addr.reset((sockaddr*)std::malloc(len));
67-
std::memcpy((uint8_t*)get(), (const uint8_t*)sa, len);
60+
set(sa, length);
6861
}
6962
SockAddr(const sockaddr_storage& ss, socklen_t len) : SockAddr((const sockaddr*)&ss, len) {}
7063

@@ -76,14 +69,10 @@ class OPENDHT_PUBLIC SockAddr {
7669

7770
bool equals(const SockAddr& o) const {
7871
return len == o.len
79-
&& std::memcmp((uint8_t*)get(), (uint8_t*)o.get(), len) == 0;
72+
&& std::memcmp((const uint8_t*)get(), (const uint8_t*)o.get(), len) == 0;
8073
}
8174
SockAddr& operator=(const SockAddr& o) {
82-
if (len != o.len) {
83-
len = o.len;
84-
addr.reset((sockaddr*)std::realloc(addr.release(), len));
85-
}
86-
std::memcpy((uint8_t*)get(), (const uint8_t*)o.get(), len);
75+
set(o.get(), o.getLength());
8776
return *this;
8877
}
8978
SockAddr& operator=(SockAddr&& o) {
@@ -204,6 +193,17 @@ class OPENDHT_PUBLIC SockAddr {
204193
socklen_t len {0};
205194
struct free_delete { void operator()(void* p) { std::free(p); } };
206195
std::unique_ptr<sockaddr, free_delete> addr {};
196+
197+
void set(const sockaddr* sa, socklen_t length) {
198+
if (len != length) {
199+
len = length;
200+
if (len) addr.reset((sockaddr*)std::malloc(len));
201+
else addr.reset();
202+
}
203+
if (len)
204+
std::memcpy((uint8_t*)get(), (const uint8_t*)sa, len);
205+
}
206+
207207
};
208208

209209
OPENDHT_PUBLIC bool operator==(const SockAddr& a, const SockAddr& b);

0 commit comments

Comments
 (0)