network: introduce address_dup() and replace address_copy() with it
This commit is contained in:
@@ -301,11 +301,23 @@ bool address_equal(const Address *a1, const Address *a2) {
|
||||
return address_compare_func(a1, a2) == 0;
|
||||
}
|
||||
|
||||
static int address_copy(Address *dest, const Address *src) {
|
||||
int address_dup(const Address *src, Address **ret) {
|
||||
_cleanup_(address_freep) Address *dest = NULL;
|
||||
int r;
|
||||
|
||||
assert(dest);
|
||||
assert(src);
|
||||
assert(ret);
|
||||
|
||||
dest = newdup(Address, src, 1);
|
||||
if (!dest)
|
||||
return -ENOMEM;
|
||||
|
||||
/* clear all pointers */
|
||||
dest->network = NULL;
|
||||
dest->section = NULL;
|
||||
dest->link = NULL;
|
||||
dest->label = NULL;
|
||||
dest->acd = NULL;
|
||||
|
||||
if (src->family == AF_INET) {
|
||||
r = free_and_strdup(&dest->label, src->label);
|
||||
@@ -313,17 +325,7 @@ static int address_copy(Address *dest, const Address *src) {
|
||||
return r;
|
||||
}
|
||||
|
||||
dest->family = src->family;
|
||||
dest->prefixlen = src->prefixlen;
|
||||
dest->scope = src->scope;
|
||||
dest->flags = src->flags;
|
||||
dest->cinfo = src->cinfo;
|
||||
dest->in_addr = src->in_addr;
|
||||
dest->in_addr_peer = src->in_addr_peer;
|
||||
if (address_may_have_broadcast(src))
|
||||
dest->broadcast = src->broadcast;
|
||||
dest->duplicate_address_detection = src->duplicate_address_detection;
|
||||
|
||||
*ret = TAKE_PTR(dest);
|
||||
return 0;
|
||||
}
|
||||
|
||||
@@ -373,11 +375,7 @@ static int address_add_internal(Link *link, Set **addresses, const Address *in,
|
||||
assert(addresses);
|
||||
assert(in);
|
||||
|
||||
r = address_new(&address);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = address_copy(address, in);
|
||||
r = address_dup(in, &address);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
@@ -955,11 +953,7 @@ static int address_acquire(Link *link, const Address *original, Address **ret) {
|
||||
else if (original->family == AF_INET6)
|
||||
in_addr.in6.s6_addr[15] |= 1;
|
||||
|
||||
r = address_new(&na);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
r = address_copy(na, original);
|
||||
r = address_dup(original, &na);
|
||||
if (r < 0)
|
||||
return r;
|
||||
|
||||
|
||||
@@ -55,6 +55,7 @@ int address_get(Link *link, const Address *in, Address **ret);
|
||||
int address_configure_handler_internal(sd_netlink *rtnl, sd_netlink_message *m, Link *link, const char *error_msg);
|
||||
int address_remove(const Address *address, Link *link);
|
||||
bool address_equal(const Address *a1, const Address *a2);
|
||||
int address_dup(const Address *src, Address **ret);
|
||||
bool address_is_ready(const Address *a);
|
||||
void address_set_broadcast(Address *a);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user