network: introduce address_copy()
This commit is contained in:
parent
eaff204f09
commit
cde1f0e8fc
|
@ -215,6 +215,29 @@ bool address_equal(Address *a1, Address *a2) {
|
||||||
return address_compare_func(a1, a2) == 0;
|
return address_compare_func(a1, a2) == 0;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
static int address_copy(Address *dest, const Address *src) {
|
||||||
|
int r;
|
||||||
|
|
||||||
|
assert(dest);
|
||||||
|
assert(src);
|
||||||
|
|
||||||
|
r = free_and_strdup(&dest->label, src->label);
|
||||||
|
if (r < 0)
|
||||||
|
return r;
|
||||||
|
|
||||||
|
dest->family = src->family;
|
||||||
|
dest->prefixlen = src->prefixlen;
|
||||||
|
dest->scope = src->scope;
|
||||||
|
dest->flags = src->flags;
|
||||||
|
dest->broadcast = src->broadcast;
|
||||||
|
dest->cinfo = src->cinfo;
|
||||||
|
dest->in_addr = src->in_addr;
|
||||||
|
dest->in_addr_peer = src->in_addr_peer;
|
||||||
|
dest->duplicate_address_detection = src->duplicate_address_detection;
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
static int address_establish(Address *address, Link *link) {
|
static int address_establish(Address *address, Link *link) {
|
||||||
bool masq;
|
bool masq;
|
||||||
int r;
|
int r;
|
||||||
|
@ -753,17 +776,9 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
|
||||||
if (r < 0)
|
if (r < 0)
|
||||||
return r;
|
return r;
|
||||||
|
|
||||||
na->flags = original->flags;
|
r = address_copy(na, original);
|
||||||
na->family = original->family;
|
if (r < 0)
|
||||||
na->prefixlen = original->prefixlen;
|
return r;
|
||||||
na->scope = original->scope;
|
|
||||||
na->cinfo = original->cinfo;
|
|
||||||
|
|
||||||
if (original->label) {
|
|
||||||
na->label = strdup(original->label);
|
|
||||||
if (!na->label)
|
|
||||||
return -ENOMEM;
|
|
||||||
}
|
|
||||||
|
|
||||||
na->broadcast = broadcast;
|
na->broadcast = broadcast;
|
||||||
na->in_addr = in_addr;
|
na->in_addr = in_addr;
|
||||||
|
|
Loading…
Reference in a new issue