struct ppc64_model {
char *name;
const struct ppc64_vendor *vendor;
- virCPUppc64Data *data;
+ virCPUppc64Data data;
};
struct ppc64_map {
}
static void
-ppc64DataFree(virCPUppc64Data *data)
+ppc64DataClear(virCPUppc64Data *data)
{
if (!data)
return;
VIR_FREE(data->pvr);
- VIR_FREE(data);
}
-static virCPUppc64Data *
-ppc64DataCopy(const virCPUppc64Data *data)
+static int
+ppc64DataCopy(virCPUppc64Data *dst, const virCPUppc64Data *src)
{
- virCPUppc64Data *copy;
size_t i;
- if (VIR_ALLOC(copy) < 0)
- goto error;
-
- if (VIR_ALLOC_N(copy->pvr, data->len) < 0)
- goto error;
+ if (VIR_ALLOC_N(dst->pvr, src->len) < 0)
+ return -1;
- copy->len = data->len;
+ dst->len = src->len;
- for (i = 0; i < data->len; i++) {
- copy->pvr[i].value = data->pvr[i].value;
- copy->pvr[i].mask = data->pvr[i].mask;
+ for (i = 0; i < src->len; i++) {
+ dst->pvr[i].value = src->pvr[i].value;
+ dst->pvr[i].mask = src->pvr[i].mask;
}
- return copy;
-
- error:
- ppc64DataFree(copy);
- return NULL;
+ return 0;
}
static void
if (!model)
return;
- ppc64DataFree(model->data);
+ ppc64DataClear(&model->data);
VIR_FREE(model->name);
VIR_FREE(model);
}
if (VIR_STRDUP(copy->name, model->name) < 0)
goto error;
- if (!(copy->data = ppc64DataCopy(model->data)))
+ if (ppc64DataCopy(©->data, &model->data) < 0)
goto error;
copy->vendor = model->vendor;
for (i = 0; i < map->nmodels; i++) {
struct ppc64_model *model = map->models[i];
- for (j = 0; j < model->data->len; j++) {
- if ((pvr & model->data->pvr[j].mask) == model->data->pvr[j].value)
+ for (j = 0; j < model->data.len; j++) {
+ if ((pvr & model->data.pvr[j].mask) == model->data.pvr[j].value)
return model;
}
}
if (VIR_ALLOC(model) < 0)
goto error;
- if (VIR_ALLOC(model->data) < 0)
- goto error;
-
model->name = virXPathString("string(@name)", ctxt);
if (!model->name) {
virReportError(VIR_ERR_INTERNAL_ERROR,
goto error;
}
- if (VIR_ALLOC_N(model->data->pvr, n) < 0)
+ if (VIR_ALLOC_N(model->data.pvr, n) < 0)
goto error;
- model->data->len = n;
+ model->data.len = n;
for (i = 0; i < n; i++) {
ctxt->node = nodes[i];
model->name);
goto error;
}
- model->data->pvr[i].value = pvr;
+ model->data.pvr[i].value = pvr;
if (virXPathULongHex("string(./@mask)", ctxt, &pvr) < 0) {
virReportError(VIR_ERR_INTERNAL_ERROR,
model->name);
goto error;
}
- model->data->pvr[i].mask = pvr;
+ model->data.pvr[i].mask = pvr;
}
cleanup:
cpuData->arch = arch;
- if (!(cpuData->data.ppc64 = ppc64DataCopy(data)))
+ if (ppc64DataCopy(&cpuData->data.ppc64, data) < 0)
VIR_FREE(cpuData);
return cpuData;
}
if (guestData)
- if (!(*guestData = ppc64MakeCPUData(arch, guest_model->data)))
+ if (!(*guestData = ppc64MakeCPUData(arch, &guest_model->data)))
goto cleanup;
ret = VIR_CPU_COMPARE_IDENTICAL;
if (!data || !(map = ppc64LoadMap()))
return -1;
- if (!(model = ppc64ModelFindPVR(map, data->data.ppc64->pvr[0].value))) {
+ if (!(model = ppc64ModelFindPVR(map, data->data.ppc64.pvr[0].value))) {
virReportError(VIR_ERR_OPERATION_FAILED,
_("Cannot find CPU model with PVR 0x%08x"),
- data->data.ppc64->pvr[0].value);
+ data->data.ppc64.pvr[0].value);
goto cleanup;
}
if (!data)
return;
- ppc64DataFree(data->data.ppc64);
+ ppc64DataClear(&data->data.ppc64);
VIR_FREE(data);
}
if (VIR_ALLOC(nodeData) < 0)
goto error;
- if (VIR_ALLOC(nodeData->data.ppc64) < 0)
- goto error;
-
- data = nodeData->data.ppc64;
+ data = &nodeData->data.ppc64;
if (VIR_ALLOC_N(data->pvr, 1) < 0)
goto error;