On Sat, Jul 28, 2018 at 11:31:33PM +0530, Sukrit Bhatnagar wrote:
By making use of GNU C's cleanup attribute handled by the
VIR_AUTOPTR macro for declaring aggregate pointer variables,
majority of the calls to *Free functions can be dropped, which
in turn leads to getting rid of most of our cleanup sections.
Signed-off-by: Sukrit Bhatnagar <skrtbhtngr(a)gmail.com>
---
src/util/virnetdevopenvswitch.c | 106 +++++++++++++++-------------------------
1 file changed, 40 insertions(+), 66 deletions(-)
diff --git a/src/util/virnetdevopenvswitch.c b/src/util/virnetdevopenvswitch.c
index a9c5e2a..eae5861 100644
--- a/src/util/virnetdevopenvswitch.c
+++ b/src/util/virnetdevopenvswitch.c
@@ -76,9 +76,7 @@ virNetDevOpenvswitchAddTimeout(virCommandPtr cmd)
static int
virNetDevOpenvswitchConstructVlans(virCommandPtr cmd, virNetDevVlanPtr virtVlan)
{
- int ret = -1;
size_t i = 0;
- virBuffer buf = VIR_BUFFER_INITIALIZER;
if (!virtVlan || !virtVlan->nTags)
return 0;
@@ -98,7 +96,12 @@ virNetDevOpenvswitchConstructVlans(virCommandPtr cmd, virNetDevVlanPtr
virtVlan)
}
if (virtVlan->trunk) {
- virBufferAddLit(&buf, "trunk=");
+ VIR_AUTOPTR(virBuffer) buf = NULL;
+
+ if (VIR_ALLOC(buf) < 0)
+ return -1;
+
+ virBufferAddLit(buf, "trunk=");
/*
* Trunk ports have at least one VLAN. Do the first one
@@ -106,24 +109,21 @@ virNetDevOpenvswitchConstructVlans(virCommandPtr cmd,
virNetDevVlanPtr virtVlan)
* start of the for loop if there are more than one VLANs
* on this trunk port.
*/
- virBufferAsprintf(&buf, "%d", virtVlan->tag[i]);
+ virBufferAsprintf(buf, "%d", virtVlan->tag[i]);
for (i = 1; i < virtVlan->nTags; i++) {
- virBufferAddLit(&buf, ",");
- virBufferAsprintf(&buf, "%d", virtVlan->tag[i]);
+ virBufferAddLit(buf, ",");
+ virBufferAsprintf(buf, "%d", virtVlan->tag[i]);
}
- if (virBufferCheckError(&buf) < 0)
- goto cleanup;
- virCommandAddArg(cmd, virBufferCurrentContent(&buf));
+ if (virBufferCheckError(buf) < 0)
+ return -1;
+ virCommandAddArg(cmd, virBufferCurrentContent(buf));
} else if (virtVlan->nTags) {
virCommandAddArgFormat(cmd, "tag=%d", virtVlan->tag[0]);
}
- ret = 0;
- cleanup:
- virBufferFreeAndReset(&buf);
- return ret;
+ return 0;
The obvious problem with virBuffer :)...otherwise it's fine, + the ordering
issue of the declarations, that applies to all patches.
Erik