This is needed by later patch when vpnd needs to remember the
previous used IP address.
---
 include/ipaddress.h |  1 +
 src/ipaddress.c     | 25 +++++++++++++++++++++++--
 2 files changed, 24 insertions(+), 2 deletions(-)

diff --git a/include/ipaddress.h b/include/ipaddress.h
index c698541..3655ca8 100644
--- a/include/ipaddress.h
+++ b/include/ipaddress.h
@@ -51,6 +51,7 @@ void connman_ipaddress_set_peer(struct connman_ipaddress 
*ipaddress,
 void connman_ipaddress_clear(struct connman_ipaddress *ipaddress);
 void connman_ipaddress_copy_address(struct connman_ipaddress *ipaddress,
                                        struct connman_ipaddress *source);
+struct connman_ipaddress *connman_ipaddress_copy(struct connman_ipaddress 
*ipaddress);
 
 #ifdef __cplusplus
 }
diff --git a/src/ipaddress.c b/src/ipaddress.c
index 95f9038..9892654 100644
--- a/src/ipaddress.c
+++ b/src/ipaddress.c
@@ -192,8 +192,7 @@ void connman_ipaddress_clear(struct connman_ipaddress 
*ipaddress)
 
 /*
  * Note that this copy function only copies the actual address and
- * prefixlen. If you need full copy of ipaddress struct, then you need
- * to create a new function that does that.
+ * prefixlen. Use the other copy function to copy the whole struct.
  */
 void connman_ipaddress_copy_address(struct connman_ipaddress *ipaddress,
                                        struct connman_ipaddress *source)
@@ -207,3 +206,25 @@ void connman_ipaddress_copy_address(struct 
connman_ipaddress *ipaddress,
        g_free(ipaddress->local);
        ipaddress->local = g_strdup(source->local);
 }
+
+struct connman_ipaddress *
+connman_ipaddress_copy(struct connman_ipaddress *ipaddress)
+{
+       struct connman_ipaddress *copy;
+
+       if (!ipaddress)
+               return NULL;
+
+       copy = g_try_new0(struct connman_ipaddress, 1);
+       if (!copy)
+               return NULL;
+
+       copy->family = ipaddress->family;
+       copy->prefixlen = ipaddress->prefixlen;
+       copy->local = g_strdup(ipaddress->local);
+       copy->peer = g_strdup(ipaddress->peer);
+       copy->broadcast = g_strdup(ipaddress->broadcast);
+       copy->gateway = g_strdup(ipaddress->gateway);
+
+       return copy;
+}
-- 
1.8.3.1

_______________________________________________
connman mailing list
connman@connman.net
https://lists.connman.net/mailman/listinfo/connman

Reply via email to