]> xenbits.xensource.com Git - libvirt.git/commitdiff
snapshot: simplify indentation of nwfilter
authorEric Blake <eblake@redhat.com>
Thu, 22 Sep 2011 19:05:03 +0000 (13:05 -0600)
committerEric Blake <eblake@redhat.com>
Wed, 26 Oct 2011 17:07:38 +0000 (11:07 -0600)
Fixing this involved some refactoring of common code out of
domain_conf and nwfilter_conf into nwfilter_params.

* src/conf/nwfilter_params.h (virNWFilterFormatParamAttributes):
Adjust signature.
* src/conf/nwfilter_params.c (_formatParameterAttrs)
(virNWFilterFormatParamAttributes): Adjust indentation handling,
and handle filterref here.
(formatterParam): Delete unused struct.
* src/conf/domain_conf.c (virDomainNetDefFormat): Adjust caller.
* src/conf/nwfilter_conf.c (virNWFilterIncludeDefFormat): Likewise.

src/conf/domain_conf.c
src/conf/nwfilter_conf.c
src/conf/nwfilter_params.c
src/conf/nwfilter_params.h

index 557d0b9b78a96645e898d384d6fd7f6c4aaf3451..ff737ecda93aee4fed35099b63799034753d88b0 100644 (file)
@@ -9554,7 +9554,6 @@ virDomainNetDefFormat(virBufferPtr buf,
                       unsigned int flags)
 {
     const char *type = virDomainNetTypeToString(def->type);
-    char *attrs;
 
     if (!type) {
         virDomainReportError(VIR_ERR_INTERNAL_ERROR,
@@ -9675,15 +9674,11 @@ virDomainNetDefFormat(virBufferPtr buf,
         }
     }
     if (def->filter) {
-        virBufferEscapeString(buf, "      <filterref filter='%s'",
-                              def->filter);
-        attrs = virNWFilterFormatParamAttributes(def->filterparams,
-                                                 "        ");
-        if (!attrs || strlen(attrs) <= 1)
-            virBufferAddLit(buf, "/>\n");
-        else
-            virBufferAsprintf(buf, ">\n%s      </filterref>\n", attrs);
-        VIR_FREE(attrs);
+        virBufferAdjustIndent(buf, 6);
+        if (virNWFilterFormatParamAttributes(buf, def->filterparams,
+                                             def->filter) < 0)
+            return -1;
+        virBufferAdjustIndent(buf, -6);
     }
     if (def->bootIndex)
         virBufferAsprintf(buf, "      <boot order='%d'/>\n", def->bootIndex);
index e0c2fb630f606b04e1b2b4991dec0d913be8f087..289d2bb55d9433c57729831bd17007953104fa36 100644 (file)
@@ -2853,19 +2853,15 @@ no_memory:
 static char *
 virNWFilterIncludeDefFormat(virNWFilterIncludeDefPtr inc)
 {
-    char *attrs;
     virBuffer buf = VIR_BUFFER_INITIALIZER;
 
-    virBufferAsprintf(&buf,"  <filterref filter='%s'",
-                      inc->filterref);
-
-    attrs = virNWFilterFormatParamAttributes(inc->params, "    ");
-
-    if (!attrs || strlen(attrs) <= 1)
-        virBufferAddLit(&buf, "/>\n");
-    else
-        virBufferAsprintf(&buf, ">\n%s  </filterref>\n", attrs);
-
+    virBufferAdjustIndent(&buf, 2);
+    if (virNWFilterFormatParamAttributes(&buf, inc->params,
+                                         inc->filterref) < 0) {
+        virBufferFreeAndReset(&buf);
+        return NULL;
+    }
+    virBufferAdjustIndent(&buf, -2);
     if (virBufferError(&buf)) {
         virReportOOMError();
         virBufferFreeAndReset(&buf);
index ee10b215845920f828010297f5141ae73556683d..871aca9b97292c0b94e55bab06c5030c07fe7b51 100644 (file)
@@ -258,41 +258,36 @@ skip_entry:
 }
 
 
-struct formatterParam {
-    virBufferPtr buf;
-    const char *indent;
-};
-
-
 static void
 _formatParameterAttrs(void *payload, const void *name, void *data)
 {
-    struct formatterParam *fp = (struct formatterParam *)data;
+    virBufferPtr buf = data;
 
-    virBufferAsprintf(fp->buf, "%s<parameter name='%s' value='%s'/>\n",
-                      fp->indent,
+    virBufferAsprintf(buf, "  <parameter name='%s' value='%s'/>\n",
                       (const char *)name,
                       (char *)payload);
 }
 
 
-char *
-virNWFilterFormatParamAttributes(virNWFilterHashTablePtr table,
-                                 const char *indent)
+int
+virNWFilterFormatParamAttributes(virBufferPtr buf,
+                                 virNWFilterHashTablePtr table,
+                                 const char *filterref)
 {
-    virBuffer buf = VIR_BUFFER_INITIALIZER;
-    struct formatterParam fp = {
-        .buf = &buf,
-        .indent = indent,
-    };
-
-    virHashForEach(table->hashTable, _formatParameterAttrs, &fp);
+    int count = virHashSize(table->hashTable);
 
-    if (virBufferError(&buf)) {
-        virReportOOMError();
-        virBufferFreeAndReset(&buf);
-        return NULL;
+    if (count < 0) {
+        virNWFilterReportError(VIR_ERR_INTERNAL_ERROR, "%s",
+                               _("missing filter parameter table"));
+        return -1;
     }
-
-    return virBufferContentAndReset(&buf);
+    virBufferAsprintf(buf, "<filterref filter='%s'", filterref);
+    if (count) {
+        virBufferAddLit(buf, ">\n");
+        virHashForEach(table->hashTable, _formatParameterAttrs, buf);
+        virBufferAddLit(buf, "</filterref>\n");
+    } else {
+        virBufferAddLit(buf, "/>\n");
+    }
+    return 0;
 }
index 012d6a175adfb959d23c7d69081e32049977f752..43452297bc5c3f281068aecff463acc287be3765 100644 (file)
@@ -1,6 +1,7 @@
 /*
  * nwfilter_params.h: parsing and data maintenance of filter parameters
  *
+ * Copyright (C) 2011 Red Hat, Inc.
  * Copyright (C) 2010 IBM Corporation
  *
  * This library is free software; you can redistribute it and/or
@@ -23,6 +24,7 @@
 # define NWFILTER_PARAMS_H
 
 # include "hash.h"
+# include "buf.h"
 
 typedef struct _virNWFilterHashTable virNWFilterHashTable;
 typedef virNWFilterHashTable *virNWFilterHashTablePtr;
@@ -35,8 +37,9 @@ struct _virNWFilterHashTable {
 
 
 virNWFilterHashTablePtr virNWFilterParseParamAttributes(xmlNodePtr cur);
-char * virNWFilterFormatParamAttributes(virNWFilterHashTablePtr table,
-                                        const char *indent);
+int virNWFilterFormatParamAttributes(virBufferPtr buf,
+                                     virNWFilterHashTablePtr table,
+                                     const char *filterref);
 
 virNWFilterHashTablePtr virNWFilterHashTableCreate(int n);
 void virNWFilterHashTableFree(virNWFilterHashTablePtr table);