return 0;
}
-static int
-virCHMonitorBuildDiskJson(virJSONValue *disks, virDomainDiskDef *diskdef)
+static virJSONValue*
+virCHMonitorBuildDiskJson(virDomainDiskDef *diskdef)
{
g_autoptr(virJSONValue) disk = virJSONValueNewObject();
if (!diskdef->src)
- return -1;
+ return NULL;
switch (diskdef->src->type) {
case VIR_STORAGE_TYPE_FILE:
if (!diskdef->src->path) {
virReportError(VIR_ERR_INVALID_ARG, "%s",
_("Missing disk file path in domain"));
- return -1;
+ return NULL;
}
if (!diskdef->info.alias) {
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
_("Missing disk alias"));
- return -1;
+ return NULL;
}
if (diskdef->bus != VIR_DOMAIN_DISK_BUS_VIRTIO) {
virReportError(VIR_ERR_INVALID_ARG,
_("Only virtio bus types are supported for '%1$s'"),
diskdef->src->path);
- return -1;
+ return NULL;
}
if (virJSONValueObjectAppendString(disk, "path", diskdef->src->path) < 0)
- return -1;
+ return NULL;
if (diskdef->src->readonly) {
if (virJSONValueObjectAppendBoolean(disk, "readonly", true) < 0)
- return -1;
+ return NULL;
}
if (virJSONValueObjectAppendString(disk, "id", diskdef->info.alias) < 0) {
- return -1;
+ return NULL;
}
- if (virJSONValueArrayAppend(disks, &disk) < 0)
- return -1;
break;
case VIR_STORAGE_TYPE_NONE:
case VIR_STORAGE_TYPE_LAST:
default:
virReportEnumRangeError(virStorageType, diskdef->src->type);
- return -1;
+ return NULL;
}
- return 0;
+ return g_steal_pointer(&disk);
}
static int
disks = virJSONValueNewArray();
for (i = 0; i < vmdef->ndisks; i++) {
- if (virCHMonitorBuildDiskJson(disks, vmdef->disks[i]) < 0)
+ g_autoptr(virJSONValue) disk = NULL;
+
+ if ((disk = virCHMonitorBuildDiskJson(vmdef->disks[i])) == NULL)
+ return -1;
+ if (virJSONValueArrayAppend(disks, &disk) < 0)
return -1;
}
if (virJSONValueObjectAppend(content, "disks", &disks) < 0)