Pablo Greco 40546a
From d808105a19611b7561c7ab0e4b128fbabebc88e2 Mon Sep 17 00:00:00 2001
Pablo Greco 40546a
Message-Id: <d808105a19611b7561c7ab0e4b128fbabebc88e2@dist-git>
Pablo Greco 40546a
From: Sukrit Bhatnagar <skrtbhtngr@gmail.com>
Pablo Greco 40546a
Date: Tue, 30 Jul 2019 15:30:49 +0200
Pablo Greco 40546a
Subject: [PATCH] util: netdevopenvswitch: use VIR_AUTOPTR for aggregate types
Pablo Greco 40546a
MIME-Version: 1.0
Pablo Greco 40546a
Content-Type: text/plain; charset=UTF-8
Pablo Greco 40546a
Content-Transfer-Encoding: 8bit
Pablo Greco 40546a
Pablo Greco 40546a
By making use of GNU C's cleanup attribute handled by the
Pablo Greco 40546a
VIR_AUTOPTR macro for declaring aggregate pointer variables,
Pablo Greco 40546a
majority of the calls to *Free functions can be dropped, which
Pablo Greco 40546a
in turn leads to getting rid of most of our cleanup sections.
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Sukrit Bhatnagar <skrtbhtngr@gmail.com>
Pablo Greco 40546a
Reviewed-by: Erik Skultety <eskultet@redhat.com>
Pablo Greco 40546a
(cherry picked from commit 1077b46de6730eea76884b921bed1ece65be26ef)
Pablo Greco 40546a
Pablo Greco 40546a
Prerequisite of: https://bugzilla.redhat.com/show_bug.cgi?id=1721434
Pablo Greco 40546a
Pablo Greco 40546a
Signed-off-by: Michal Privoznik <mprivozn@redhat.com>
Pablo Greco 40546a
Message-Id: <1b5f75ad2258bb10ea75fe646271e9625d49f998.1564493409.git.mprivozn@redhat.com>
Pablo Greco 40546a
Reviewed-by: Ján Tomko <jtomko@redhat.com>
Pablo Greco 40546a
---
Pablo Greco 40546a
 src/util/virnetdevopenvswitch.c | 80 +++++++++++----------------------
Pablo Greco 40546a
 1 file changed, 27 insertions(+), 53 deletions(-)
Pablo Greco 40546a
Pablo Greco 40546a
diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
Pablo Greco 40546a
index 0dcd49d40f..2f5c7ac789 100644
Pablo Greco 40546a
--- a/src/util/virnetdevopenvswitch.c
Pablo Greco 40546a
+++ b/src/util/virnetdevopenvswitch.c
Pablo Greco 40546a
@@ -144,11 +144,10 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
Pablo Greco 40546a
                                    virNetDevVPortProfilePtr ovsport,
Pablo Greco 40546a
                                    virNetDevVlanPtr virtVlan)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    int ret = -1;
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
     char macaddrstr[VIR_MAC_STRING_BUFLEN];
Pablo Greco 40546a
     char ifuuidstr[VIR_UUID_STRING_BUFLEN];
Pablo Greco 40546a
     char vmuuidstr[VIR_UUID_STRING_BUFLEN];
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
     VIR_AUTOFREE(char *) attachedmac_ex_id = NULL;
Pablo Greco 40546a
     VIR_AUTOFREE(char *) ifaceid_ex_id = NULL;
Pablo Greco 40546a
     VIR_AUTOFREE(char *) profile_ex_id = NULL;
Pablo Greco 40546a
@@ -160,17 +159,17 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (virAsprintf(&attachedmac_ex_id, "external-ids:attached-mac=\"%s\"",
Pablo Greco 40546a
                     macaddrstr) < 0)
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     if (virAsprintf(&ifaceid_ex_id, "external-ids:iface-id=\"%s\"",
Pablo Greco 40546a
                     ifuuidstr) < 0)
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     if (virAsprintf(&vmid_ex_id, "external-ids:vm-id=\"%s\"",
Pablo Greco 40546a
                     vmuuidstr) < 0)
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     if (ovsport->profileID[0] != '\0') {
Pablo Greco 40546a
         if (virAsprintf(&profile_ex_id, "external-ids:port-profile=\"%s\"",
Pablo Greco 40546a
                         ovsport->profileID) < 0)
Pablo Greco 40546a
-            goto cleanup;
Pablo Greco 40546a
+            return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
     cmd = virCommandNew(OVSVSCTL);
Pablo Greco 40546a
@@ -179,7 +178,7 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
Pablo Greco 40546a
                          ifname, "--", "add-port", brname, ifname, NULL);
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (virNetDevOpenvswitchConstructVlans(cmd, virtVlan) < 0)
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (ovsport->profileID[0] == '\0') {
Pablo Greco 40546a
         virCommandAddArgList(cmd,
Pablo Greco 40546a
@@ -204,13 +203,10 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR,
Pablo Greco 40546a
                        _("Unable to add port %s to OVS bridge %s"),
Pablo Greco 40546a
                        ifname, brname);
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
-    ret = 0;
Pablo Greco 40546a
- cleanup:
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
-    return ret;
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 /**
Pablo Greco 40546a
@@ -223,8 +219,7 @@ int virNetDevOpenvswitchAddPort(const char *brname, const char *ifname,
Pablo Greco 40546a
  */
Pablo Greco 40546a
 int virNetDevOpenvswitchRemovePort(const char *brname ATTRIBUTE_UNUSED, const char *ifname)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    int ret = -1;
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     cmd = virCommandNew(OVSVSCTL);
Pablo Greco 40546a
     virNetDevOpenvswitchAddTimeout(cmd);
Pablo Greco 40546a
@@ -233,13 +228,10 @@ int virNetDevOpenvswitchRemovePort(const char *brname ATTRIBUTE_UNUSED, const ch
Pablo Greco 40546a
     if (virCommandRun(cmd, NULL) < 0) {
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR,
Pablo Greco 40546a
                        _("Unable to delete port %s from OVS"), ifname);
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
-    ret = 0;
Pablo Greco 40546a
- cleanup:
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
-    return ret;
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 /**
Pablo Greco 40546a
@@ -253,9 +245,8 @@ int virNetDevOpenvswitchRemovePort(const char *brname ATTRIBUTE_UNUSED, const ch
Pablo Greco 40546a
  */
Pablo Greco 40546a
 int virNetDevOpenvswitchGetMigrateData(char **migrate, const char *ifname)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
     size_t len;
Pablo Greco 40546a
-    int ret = -1;
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     cmd = virCommandNew(OVSVSCTL);
Pablo Greco 40546a
     virNetDevOpenvswitchAddTimeout(cmd);
Pablo Greco 40546a
@@ -269,7 +260,7 @@ int virNetDevOpenvswitchGetMigrateData(char **migrate, const char *ifname)
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR,
Pablo Greco 40546a
                        _("Unable to run command to get OVS port data for "
Pablo Greco 40546a
                          "interface %s"), ifname);
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
     /* Wipeout the newline, if it exists */
Pablo Greco 40546a
@@ -277,10 +268,7 @@ int virNetDevOpenvswitchGetMigrateData(char **migrate, const char *ifname)
Pablo Greco 40546a
     if (len > 0)
Pablo Greco 40546a
         (*migrate)[len - 1] = '\0';
Pablo Greco 40546a
 
Pablo Greco 40546a
-    ret = 0;
Pablo Greco 40546a
- cleanup:
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
-    return ret;
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 /**
Pablo Greco 40546a
@@ -294,8 +282,7 @@ int virNetDevOpenvswitchGetMigrateData(char **migrate, const char *ifname)
Pablo Greco 40546a
  */
Pablo Greco 40546a
 int virNetDevOpenvswitchSetMigrateData(char *migrate, const char *ifname)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
-    int ret = -1;
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (!migrate) {
Pablo Greco 40546a
         VIR_DEBUG("No OVS port data for interface %s", ifname);
Pablo Greco 40546a
@@ -312,13 +299,10 @@ int virNetDevOpenvswitchSetMigrateData(char *migrate, const char *ifname)
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR,
Pablo Greco 40546a
                        _("Unable to run command to set OVS port data for "
Pablo Greco 40546a
                          "interface %s"), ifname);
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
-    ret = 0;
Pablo Greco 40546a
- cleanup:
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
-    return ret;
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 /**
Pablo Greco 40546a
@@ -334,10 +318,9 @@ int
Pablo Greco 40546a
 virNetDevOpenvswitchInterfaceStats(const char *ifname,
Pablo Greco 40546a
                                    virDomainInterfaceStatsPtr stats)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
     char *tmp;
Pablo Greco 40546a
     bool gotStats = false;
Pablo Greco 40546a
-    int ret = -1;
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
     VIR_AUTOFREE(char *) output = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     /* Just ensure the interface exists in ovs */
Pablo Greco 40546a
@@ -350,7 +333,7 @@ virNetDevOpenvswitchInterfaceStats(const char *ifname,
Pablo Greco 40546a
         /* no ovs-vsctl or interface 'ifname' doesn't exists in ovs */
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
Pablo Greco 40546a
                        _("Interface not found"));
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
 #define GET_STAT(name, member) \
Pablo Greco 40546a
@@ -369,7 +352,7 @@ virNetDevOpenvswitchInterfaceStats(const char *ifname,
Pablo Greco 40546a
                 *tmp != '\n') { \
Pablo Greco 40546a
                 virReportError(VIR_ERR_INTERNAL_ERROR, "%s", \
Pablo Greco 40546a
                                _("Fail to parse ovs-vsctl output")); \
Pablo Greco 40546a
-                goto cleanup; \
Pablo Greco 40546a
+                return -1; \
Pablo Greco 40546a
             } \
Pablo Greco 40546a
             gotStats = true; \
Pablo Greco 40546a
         } \
Pablo Greco 40546a
@@ -389,14 +372,10 @@ virNetDevOpenvswitchInterfaceStats(const char *ifname,
Pablo Greco 40546a
     if (!gotStats) {
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
Pablo Greco 40546a
                        _("Interface doesn't have any statistics"));
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
-    ret = 0;
Pablo Greco 40546a
-
Pablo Greco 40546a
- cleanup:
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
-    return ret;
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
 /**
Pablo Greco 40546a
@@ -414,12 +393,12 @@ int
Pablo Greco 40546a
 virNetDevOpenvswitchGetVhostuserIfname(const char *path,
Pablo Greco 40546a
                                        char **ifname)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
     char *tmpIfname = NULL;
Pablo Greco 40546a
     char **tokens = NULL;
Pablo Greco 40546a
     size_t ntokens = 0;
Pablo Greco 40546a
     int status;
Pablo Greco 40546a
     int ret = -1;
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     /* Openvswitch vhostuser path are hardcoded to
Pablo Greco 40546a
      * /<runstatedir>/openvswitch/<ifname>
Pablo Greco 40546a
@@ -450,7 +429,6 @@ virNetDevOpenvswitchGetVhostuserIfname(const char *path,
Pablo Greco 40546a
 
Pablo Greco 40546a
  cleanup:
Pablo Greco 40546a
     virStringListFreeCount(tokens, ntokens);
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
     return ret;
Pablo Greco 40546a
 }
Pablo Greco 40546a
 
Pablo Greco 40546a
@@ -466,8 +444,7 @@ virNetDevOpenvswitchGetVhostuserIfname(const char *path,
Pablo Greco 40546a
 int virNetDevOpenvswitchUpdateVlan(const char *ifname,
Pablo Greco 40546a
                                    virNetDevVlanPtr virtVlan)
Pablo Greco 40546a
 {
Pablo Greco 40546a
-    int ret = -1;
Pablo Greco 40546a
-    virCommandPtr cmd = NULL;
Pablo Greco 40546a
+    VIR_AUTOPTR(virCommand) cmd = NULL;
Pablo Greco 40546a
 
Pablo Greco 40546a
     cmd = virCommandNew(OVSVSCTL);
Pablo Greco 40546a
     virNetDevOpenvswitchAddTimeout(cmd);
Pablo Greco 40546a
@@ -478,16 +455,13 @@ int virNetDevOpenvswitchUpdateVlan(const char *ifname,
Pablo Greco 40546a
                          "--", "--if-exists", "set", "Port", ifname, NULL);
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (virNetDevOpenvswitchConstructVlans(cmd, virtVlan) < 0)
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
 
Pablo Greco 40546a
     if (virCommandRun(cmd, NULL) < 0) {
Pablo Greco 40546a
         virReportError(VIR_ERR_INTERNAL_ERROR,
Pablo Greco 40546a
                        _("Unable to set vlan configuration on port %s"), ifname);
Pablo Greco 40546a
-        goto cleanup;
Pablo Greco 40546a
+        return -1;
Pablo Greco 40546a
     }
Pablo Greco 40546a
 
Pablo Greco 40546a
-    ret = 0;
Pablo Greco 40546a
- cleanup:
Pablo Greco 40546a
-    virCommandFree(cmd);
Pablo Greco 40546a
-    return ret;
Pablo Greco 40546a
+    return 0;
Pablo Greco 40546a
 }
Pablo Greco 40546a
-- 
Pablo Greco 40546a
2.22.0
Pablo Greco 40546a