[libvirt] [PATCH v4 26/31] util: arptable: use VIR_AUTOFREE instead of VIR_FREE for scalar types

Sukrit Bhatnagar skrtbhtngr at gmail.com
Fri Jul 13 17:55:04 UTC 2018


By making use of GNU C's cleanup attribute handled by the
VIR_AUTOFREE macro for declaring scalar variables, majority
of the VIR_FREE calls can be dropped, which in turn leads to
getting rid of most of our cleanup sections.

Signed-off-by: Sukrit Bhatnagar <skrtbhtngr at gmail.com>
Reviewed-by: Erik Skultety <eskultet at redhat.com>
---
 src/util/virarptable.c | 14 +++-----------
 1 file changed, 3 insertions(+), 11 deletions(-)

diff --git a/src/util/virarptable.c b/src/util/virarptable.c
index c0e90dc..04a6f35 100644
--- a/src/util/virarptable.c
+++ b/src/util/virarptable.c
@@ -71,9 +71,8 @@ virArpTableGet(void)
 {
     int num = 0;
     int msglen;
-    void *nlData = NULL;
+    VIR_AUTOFREE(void *) nlData = NULL;
     virArpTablePtr table = NULL;
-    char *ipstr = NULL;
     struct nlmsghdr* nh;
     struct rtattr * tb[NDA_MAX+1];
 
@@ -108,7 +107,7 @@ virArpTableGet(void)
             continue;
 
         if (nh->nlmsg_type == NLMSG_DONE)
-            goto end_of_netlink_messages;
+            return table;
 
         VIR_WARNINGS_NO_CAST_ALIGN
         parse_rtattr(tb, NDA_MAX, NDA_RTA(r),
@@ -119,6 +118,7 @@ virArpTableGet(void)
             continue;
 
         if (tb[NDA_DST]) {
+            VIR_AUTOFREE(char *) ipstr = NULL;
             virSocketAddr virAddr;
             if (VIR_REALLOC_N(table->t, num + 1) < 0)
                 goto cleanup;
@@ -134,8 +134,6 @@ virArpTableGet(void)
 
             if (VIR_STRDUP(table->t[num].ipaddr, ipstr) < 0)
                 goto cleanup;
-
-            VIR_FREE(ipstr);
         }
 
         if (tb[NDA_LLADDR]) {
@@ -154,14 +152,8 @@ virArpTableGet(void)
         }
     }
 
- end_of_netlink_messages:
-    VIR_FREE(nlData);
-    return table;
-
  cleanup:
     virArpTableFree(table);
-    VIR_FREE(ipstr);
-    VIR_FREE(nlData);
     return NULL;
 }
 
-- 
1.8.3.1




More information about the libvir-list mailing list