From 6ae1190956312a5c94695eeeab9028519815d473 Mon Sep 17 00:00:00 2001 From: Erik Skultety Date: Thu, 26 Mar 2015 16:44:38 +0100 Subject: [PATCH] conf: Introduce virStoragePoolDefFormatBuf When modifying config/status XML, it might be handy to include some additional XML elements (e.g. ). In order to do so, introduce new formatting function virStoragePoolDefFormatBuf and make virStoragePoolDefFormat call it. --- src/conf/storage_conf.c | 75 +++++++++++++++++++++++------------------ 1 file changed, 43 insertions(+), 32 deletions(-) diff --git a/src/conf/storage_conf.c b/src/conf/storage_conf.c index 8b1898ba1a..1df3750f36 100644 --- a/src/conf/storage_conf.c +++ b/src/conf/storage_conf.c @@ -1150,76 +1150,87 @@ virStoragePoolSourceFormat(virBufferPtr buf, } -char * -virStoragePoolDefFormat(virStoragePoolDefPtr def) +static int +virStoragePoolDefFormatBuf(virBufferPtr buf, + virStoragePoolDefPtr def) { virStoragePoolOptionsPtr options; - virBuffer buf = VIR_BUFFER_INITIALIZER; - const char *type; char uuid[VIR_UUID_STRING_BUFLEN]; + const char *type; options = virStoragePoolOptionsForPoolType(def->type); if (options == NULL) - return NULL; + return -1; type = virStoragePoolTypeToString(def->type); if (!type) { virReportError(VIR_ERR_INTERNAL_ERROR, "%s", _("unexpected pool type")); - goto cleanup; + return -1; } - virBufferAsprintf(&buf, "\n", type); - virBufferAdjustIndent(&buf, 2); - virBufferEscapeString(&buf, "%s\n", def->name); + virBufferAsprintf(buf, "\n", type); + virBufferAdjustIndent(buf, 2); + virBufferEscapeString(buf, "%s\n", def->name); virUUIDFormat(def->uuid, uuid); - virBufferAsprintf(&buf, "%s\n", uuid); + virBufferAsprintf(buf, "%s\n", uuid); - virBufferAsprintf(&buf, "%llu\n", + virBufferAsprintf(buf, "%llu\n", def->capacity); - virBufferAsprintf(&buf, "%llu\n", + virBufferAsprintf(buf, "%llu\n", def->allocation); - virBufferAsprintf(&buf, "%llu\n", + virBufferAsprintf(buf, "%llu\n", def->available); - if (virStoragePoolSourceFormat(&buf, options, &def->source) < 0) - goto cleanup; + if (virStoragePoolSourceFormat(buf, options, &def->source) < 0) + return -1; /* RBD, Sheepdog, and Gluster devices are not local block devs nor * files, so they don't have a target */ if (def->type != VIR_STORAGE_POOL_RBD && def->type != VIR_STORAGE_POOL_SHEEPDOG && def->type != VIR_STORAGE_POOL_GLUSTER) { - virBufferAddLit(&buf, "\n"); - virBufferAdjustIndent(&buf, 2); + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); - virBufferEscapeString(&buf, "%s\n", def->target.path); + virBufferEscapeString(buf, "%s\n", def->target.path); - virBufferAddLit(&buf, "\n"); - virBufferAdjustIndent(&buf, 2); - virBufferAsprintf(&buf, "0%o\n", + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, 2); + virBufferAsprintf(buf, "0%o\n", def->target.perms.mode); - virBufferAsprintf(&buf, "%d\n", + virBufferAsprintf(buf, "%d\n", (int) def->target.perms.uid); - virBufferAsprintf(&buf, "%d\n", + virBufferAsprintf(buf, "%d\n", (int) def->target.perms.gid); - virBufferEscapeString(&buf, "\n", + virBufferEscapeString(buf, "\n", def->target.perms.label); - virBufferAdjustIndent(&buf, -2); - virBufferAddLit(&buf, "\n"); - virBufferAdjustIndent(&buf, -2); - virBufferAddLit(&buf, "\n"); + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); } - virBufferAdjustIndent(&buf, -2); - virBufferAddLit(&buf, "\n"); + virBufferAdjustIndent(buf, -2); + virBufferAddLit(buf, "\n"); + + return 0; +} + +char * +virStoragePoolDefFormat(virStoragePoolDefPtr def) +{ + virBuffer buf = VIR_BUFFER_INITIALIZER; + + if (virStoragePoolDefFormatBuf(&buf, def) < 0) + goto error; if (virBufferCheckError(&buf) < 0) - goto cleanup; + goto error; return virBufferContentAndReset(&buf); - cleanup: + error: virBufferFreeAndReset(&buf); return NULL; } -- GitLab