diff --git a/src/conf/nwfilter_conf.c b/src/conf/nwfilter_conf.c
index 73e668fe0f..2ea4d2ea6d 100644
--- a/src/conf/nwfilter_conf.c
+++ b/src/conf/nwfilter_conf.c
@@ -2,7 +2,7 @@
* nwfilter_conf.c: network filter XML processing
* (derived from storage_conf.c)
*
- * Copyright (C) 2006-2013 Red Hat, Inc.
+ * Copyright (C) 2006-2014 Red Hat, Inc.
* Copyright (C) 2006-2008 Daniel P. Berrange
*
* Copyright (C) 2010-2011 IBM Corporation
@@ -3216,7 +3216,7 @@ virNWFilterRuleDefDetailsFormat(virBufferPtr buf,
enum virNWFilterEntryItemFlags flags = item->flags;
if ((flags & NWFILTER_ENTRY_ITEM_FLAG_EXISTS)) {
if (!typeShown) {
- virBufferAsprintf(buf, " <%s", type);
+ virBufferAsprintf(buf, "<%s", type);
typeShown = true;
neverShown = false;
}
@@ -3327,95 +3327,59 @@ virNWFilterRuleDefDetailsFormat(virBufferPtr buf,
if (neverShown)
virBufferAsprintf(buf,
- " <%s/>\n", type);
+ "<%s/>\n", type);
err_exit:
return;
}
-static char *
-virNWFilterRuleDefFormat(virNWFilterRuleDefPtr def)
+static int
+virNWFilterRuleDefFormat(virBufferPtr buf, virNWFilterRuleDefPtr def)
{
size_t i;
- virBuffer buf = VIR_BUFFER_INITIALIZER;
- virBuffer buf2 = VIR_BUFFER_INITIALIZER;
- char *data;
+ bool subelement = false;
- virBufferAsprintf(&buf, " action),
virNWFilterRuleDirectionTypeToString(def->tt),
def->priority);
if ((def->flags & RULE_FLAG_NO_STATEMATCH))
- virBufferAddLit(&buf, " statematch='false'");
+ virBufferAddLit(buf, " statematch='false'");
+ virBufferAdjustIndent(buf, 2);
i = 0;
while (virAttr[i].id) {
if (virAttr[i].prtclType == def->prtclType) {
- virNWFilterRuleDefDetailsFormat(&buf2,
+ if (!subelement)
+ virBufferAddLit(buf, ">\n");
+ virNWFilterRuleDefDetailsFormat(buf,
virAttr[i].id,
virAttr[i].att,
def);
+ subelement = true;
break;
}
i++;
}
- if (virBufferError(&buf2))
- goto no_memory;
-
- data = virBufferContentAndReset(&buf2);
-
- if (data) {
- virBufferAddLit(&buf, ">\n");
- virBufferAsprintf(&buf, "%s \n", data);
- VIR_FREE(data);
- } else
- virBufferAddLit(&buf, "/>\n");
-
- if (virBufferError(&buf))
- goto no_memory;
-
- return virBufferContentAndReset(&buf);
-
-no_memory:
- virReportOOMError();
- virBufferFreeAndReset(&buf);
- virBufferFreeAndReset(&buf2);
-
- return NULL;
+ virBufferAdjustIndent(buf, -2);
+ if (subelement)
+ virBufferAddLit(buf, "\n");
+ else
+ virBufferAddLit(buf, "/>\n");
+ return 0;
}
-static char *
-virNWFilterIncludeDefFormat(virNWFilterIncludeDefPtr inc)
-{
- virBuffer buf = VIR_BUFFER_INITIALIZER;
-
- virBufferAdjustIndent(&buf, 2);
- if (virNWFilterFormatParamAttributes(&buf, inc->params,
- inc->filterref) < 0) {
- virBufferFreeAndReset(&buf);
- return NULL;
- }
- virBufferAdjustIndent(&buf, -2);
- if (virBufferError(&buf)) {
- virReportOOMError();
- virBufferFreeAndReset(&buf);
- return NULL;
- }
-
- return virBufferContentAndReset(&buf);
-}
-
-
-static char *
-virNWFilterEntryFormat(virNWFilterEntryPtr entry)
+static int
+virNWFilterEntryFormat(virBufferPtr buf, virNWFilterEntryPtr entry)
{
if (entry->rule)
- return virNWFilterRuleDefFormat(entry->rule);
- return virNWFilterIncludeDefFormat(entry->include);
+ return virNWFilterRuleDefFormat(buf, entry->rule);
+ return virNWFilterFormatParamAttributes(buf, entry->include->params,
+ entry->include->filterref);
}
@@ -3425,7 +3389,6 @@ virNWFilterDefFormat(const virNWFilterDef *def)
virBuffer buf = VIR_BUFFER_INITIALIZER;
char uuid[VIR_UUID_STRING_BUFLEN];
size_t i;
- char *xml;
virBufferAsprintf(&buf, "name,
@@ -3434,18 +3397,17 @@ virNWFilterDefFormat(const virNWFilterDef *def)
virBufferAsprintf(&buf, " priority='%d'",
def->chainPriority);
virBufferAddLit(&buf, ">\n");
+ virBufferAdjustIndent(&buf, 2);
virUUIDFormat(def->uuid, uuid);
- virBufferAsprintf(&buf, " %s\n", uuid);
+ virBufferAsprintf(&buf, "%s\n", uuid);
for (i = 0; i < def->nentries; i++) {
- xml = virNWFilterEntryFormat(def->filterEntries[i]);
- if (!xml)
+ if (virNWFilterEntryFormat(&buf, def->filterEntries[i]) < 0)
goto err_exit;
- virBufferAdd(&buf, xml, -1);
- VIR_FREE(xml);
}
+ virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "\n");
if (virBufferError(&buf))
diff --git a/src/conf/nwfilter_params.c b/src/conf/nwfilter_params.c
index 2379aa7f0c..a78c407849 100644
--- a/src/conf/nwfilter_params.c
+++ b/src/conf/nwfilter_params.c
@@ -1,7 +1,7 @@
/*
* nwfilter_params.c: parsing and data maintenance of filter parameters
*
- * Copyright (C) 2011-2013 Red Hat, Inc.
+ * Copyright (C) 2011-2014 Red Hat, Inc.
* Copyright (C) 2010 IBM Corporation
*
* This library is free software; you can redistribute it and/or
@@ -901,6 +901,7 @@ virNWFilterFormatParamAttributes(virBufferPtr buf,
virBufferAsprintf(buf, "\n");
+ virBufferAdjustIndent(buf, 2);
for (i = 0; i < numKeys; i++) {
const virNWFilterVarValue *value = items[i].value;
@@ -908,11 +909,12 @@ virNWFilterFormatParamAttributes(virBufferPtr buf,
for (j = 0; j < card; j++)
virBufferAsprintf(buf,
- " \n",
+ "\n",
(const char *)items[i].key,
virNWFilterVarValueGetNthValue(value, j));
}
+ virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "\n");
} else {
virBufferAddLit(buf, "/>\n");