diff --git a/src/cpu/cpu_powerpc.c b/src/cpu/cpu_powerpc.c index 871401b0170aeca0ab844d8ce5057d83404c5743..1cd6874c0508ebce750c2ebb21a850d453652edb 100644 --- a/src/cpu/cpu_powerpc.c +++ b/src/cpu/cpu_powerpc.c @@ -666,11 +666,15 @@ ppcGetModels(char ***models) model = map->models; while (model != NULL) { - if (VIR_STRDUP(name, model->name) < 0) - goto error; + if (models) { + if (VIR_STRDUP(name, model->name) < 0) + goto error; - if (VIR_INSERT_ELEMENT(*models, 0, nmodels, name) < 0) - goto error; + if (VIR_APPEND_ELEMENT(*models, nmodels, name) < 0) + goto error; + } else { + nmodels++; + } model = model->next; } @@ -681,7 +685,10 @@ ppcGetModels(char ***models) return nmodels; error: - virStringFreeList(*models); + if (models) { + virStringFreeList(*models); + *models = NULL; + } nmodels = -1; goto cleanup; } diff --git a/src/cpu/cpu_x86.c b/src/cpu/cpu_x86.c index f6dcba41d087178b4fea0f8948aaa3e6b8069f45..45be262307e85bfe36aa4f268fcf428a3ed5c287 100644 --- a/src/cpu/cpu_x86.c +++ b/src/cpu/cpu_x86.c @@ -2176,11 +2176,15 @@ x86GetModels(char ***models) model = map->models; while (model != NULL) { - if (VIR_STRDUP(name, model->name) < 0) - goto error; + if (models) { + if (VIR_STRDUP(name, model->name) < 0) + goto error; - if (VIR_INSERT_ELEMENT(*models, 0, nmodels, name) < 0) - goto error; + if (VIR_APPEND_ELEMENT(*models, nmodels, name) < 0) + goto error; + } else { + nmodels++; + } model = model->next; } @@ -2188,7 +2192,10 @@ x86GetModels(char ***models) return nmodels; error: - virStringFreeList(*models); + if (models) { + virStringFreeList(*models); + *models = NULL; + } return -1; }