1
0
mirror of https://gitlab.com/libvirt/libvirt.git synced 2025-03-07 17:28:15 +00:00

conf: eliminate hardcoded indentation in nwfilter xml

This file was using multiple virBuffers, inserting the contents of
buf3 into buf2, then inserting the contents of buf2 into buf1, rather
than the more conventional method of just passing around a single
virBufferPtr and streaming everything into that single buffer. This
was unnecessary, and also made it more difficult to make indentation
relative, because when you insert a string into a buffer, the
indentation of the buffer is only applied once at the beginning of the
string, *not* each time a newline is encountered in the string.
This commit is contained in:
Laine Stump 2014-03-05 17:04:15 +02:00
parent 257e62dfee
commit d3679928b1
2 changed files with 32 additions and 68 deletions

View File

@ -2,7 +2,7 @@
* nwfilter_conf.c: network filter XML processing * nwfilter_conf.c: network filter XML processing
* (derived from storage_conf.c) * (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) 2006-2008 Daniel P. Berrange
* *
* Copyright (C) 2010-2011 IBM Corporation * Copyright (C) 2010-2011 IBM Corporation
@ -3334,88 +3334,52 @@ err_exit:
} }
static char * static int
virNWFilterRuleDefFormat(virNWFilterRuleDefPtr def) virNWFilterRuleDefFormat(virBufferPtr buf, virNWFilterRuleDefPtr def)
{ {
size_t i; size_t i;
virBuffer buf = VIR_BUFFER_INITIALIZER; bool subelement = false;
virBuffer buf2 = VIR_BUFFER_INITIALIZER;
char *data;
virBufferAsprintf(&buf, " <rule action='%s' direction='%s' priority='%d'", virBufferAsprintf(buf, "<rule action='%s' direction='%s' priority='%d'",
virNWFilterRuleActionTypeToString(def->action), virNWFilterRuleActionTypeToString(def->action),
virNWFilterRuleDirectionTypeToString(def->tt), virNWFilterRuleDirectionTypeToString(def->tt),
def->priority); def->priority);
if ((def->flags & RULE_FLAG_NO_STATEMATCH)) if ((def->flags & RULE_FLAG_NO_STATEMATCH))
virBufferAddLit(&buf, " statematch='false'"); virBufferAddLit(buf, " statematch='false'");
virBufferAdjustIndent(buf, 2);
i = 0; i = 0;
while (virAttr[i].id) { while (virAttr[i].id) {
if (virAttr[i].prtclType == def->prtclType) { if (virAttr[i].prtclType == def->prtclType) {
virNWFilterRuleDefDetailsFormat(&buf2, if (!subelement)
virBufferAddLit(buf, ">\n");
virNWFilterRuleDefDetailsFormat(buf,
virAttr[i].id, virAttr[i].id,
virAttr[i].att, virAttr[i].att,
def); def);
subelement = true;
break; break;
} }
i++; i++;
} }
if (virBufferError(&buf2)) virBufferAdjustIndent(buf, -2);
goto no_memory; if (subelement)
virBufferAddLit(buf, "</rule>\n");
data = virBufferContentAndReset(&buf2); else
virBufferAddLit(buf, "/>\n");
if (data) { return 0;
virBufferAddLit(&buf, ">\n");
virBufferAsprintf(&buf, "%s </rule>\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;
} }
static char * static int
virNWFilterIncludeDefFormat(virNWFilterIncludeDefPtr inc) virNWFilterEntryFormat(virBufferPtr buf, virNWFilterEntryPtr entry)
{
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)
{ {
if (entry->rule) if (entry->rule)
return virNWFilterRuleDefFormat(entry->rule); return virNWFilterRuleDefFormat(buf, entry->rule);
return virNWFilterIncludeDefFormat(entry->include); return virNWFilterFormatParamAttributes(buf, entry->include->params,
entry->include->filterref);
} }
@ -3425,7 +3389,6 @@ virNWFilterDefFormat(const virNWFilterDef *def)
virBuffer buf = VIR_BUFFER_INITIALIZER; virBuffer buf = VIR_BUFFER_INITIALIZER;
char uuid[VIR_UUID_STRING_BUFLEN]; char uuid[VIR_UUID_STRING_BUFLEN];
size_t i; size_t i;
char *xml;
virBufferAsprintf(&buf, "<filter name='%s' chain='%s'", virBufferAsprintf(&buf, "<filter name='%s' chain='%s'",
def->name, def->name,
@ -3434,18 +3397,17 @@ virNWFilterDefFormat(const virNWFilterDef *def)
virBufferAsprintf(&buf, " priority='%d'", virBufferAsprintf(&buf, " priority='%d'",
def->chainPriority); def->chainPriority);
virBufferAddLit(&buf, ">\n"); virBufferAddLit(&buf, ">\n");
virBufferAdjustIndent(&buf, 2);
virUUIDFormat(def->uuid, uuid); virUUIDFormat(def->uuid, uuid);
virBufferAsprintf(&buf, "<uuid>%s</uuid>\n", uuid); virBufferAsprintf(&buf, "<uuid>%s</uuid>\n", uuid);
for (i = 0; i < def->nentries; i++) { for (i = 0; i < def->nentries; i++) {
xml = virNWFilterEntryFormat(def->filterEntries[i]); if (virNWFilterEntryFormat(&buf, def->filterEntries[i]) < 0)
if (!xml)
goto err_exit; goto err_exit;
virBufferAdd(&buf, xml, -1);
VIR_FREE(xml);
} }
virBufferAdjustIndent(&buf, -2);
virBufferAddLit(&buf, "</filter>\n"); virBufferAddLit(&buf, "</filter>\n");
if (virBufferError(&buf)) if (virBufferError(&buf))

View File

@ -1,7 +1,7 @@
/* /*
* nwfilter_params.c: parsing and data maintenance of filter parameters * 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 * Copyright (C) 2010 IBM Corporation
* *
* This library is free software; you can redistribute it and/or * This library is free software; you can redistribute it and/or
@ -901,6 +901,7 @@ virNWFilterFormatParamAttributes(virBufferPtr buf,
virBufferAsprintf(buf, "<filterref filter='%s'", filterref); virBufferAsprintf(buf, "<filterref filter='%s'", filterref);
if (numKeys) { if (numKeys) {
virBufferAddLit(buf, ">\n"); virBufferAddLit(buf, ">\n");
virBufferAdjustIndent(buf, 2);
for (i = 0; i < numKeys; i++) { for (i = 0; i < numKeys; i++) {
const virNWFilterVarValue *value = items[i].value; const virNWFilterVarValue *value = items[i].value;
@ -913,6 +914,7 @@ virNWFilterFormatParamAttributes(virBufferPtr buf,
virNWFilterVarValueGetNthValue(value, j)); virNWFilterVarValueGetNthValue(value, j));
} }
virBufferAdjustIndent(buf, -2);
virBufferAddLit(buf, "</filterref>\n"); virBufferAddLit(buf, "</filterref>\n");
} else { } else {
virBufferAddLit(buf, "/>\n"); virBufferAddLit(buf, "/>\n");