]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
network: introduce address_copy()
authorYu Watanabe <watanabe.yu+github@gmail.com>
Sat, 3 Oct 2020 23:47:42 +0000 (08:47 +0900)
committerYu Watanabe <watanabe.yu+github@gmail.com>
Tue, 6 Oct 2020 17:54:01 +0000 (02:54 +0900)
src/network/networkd-address.c

index 78c8a3f0436af86f90ad45105e34228b7824b4b6..89b17d31475762a530273c3aa9080f4a024629ad 100644 (file)
@@ -215,6 +215,29 @@ bool address_equal(Address *a1, Address *a2) {
         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) {
         bool masq;
         int r;
@@ -753,17 +776,9 @@ static int address_acquire(Link *link, Address *original, Address **ret) {
         if (r < 0)
                 return r;
 
-        na->flags = original->flags;
-        na->family = original->family;
-        na->prefixlen = original->prefixlen;
-        na->scope = original->scope;
-        na->cinfo = original->cinfo;
-
-        if (original->label) {
-                na->label = strdup(original->label);
-                if (!na->label)
-                        return -ENOMEM;
-        }
+        r = address_copy(na, original);
+        if (r < 0)
+                return r;
 
         na->broadcast = broadcast;
         na->in_addr = in_addr;