mirror of
https://gitlab.com/libvirt/libvirt.git
synced 2024-08-28 19:41:16 +00:00
util: json: Split out array->strinlist conversion from virJSONValueObjectGetStringArray
Introduce virJSONValueArrayToStringList which does only the conversion from an array to a stringlist. This will allow refactoring the callers to be more careful in case when they want to handle the existance of the member in the parent object differently. Signed-off-by: Peter Krempa <pkrempa@redhat.com> Reviewed-by: Michal Privoznik <mprivozn@redhat.com>
This commit is contained in:
parent
962ce78175
commit
6765bdeaf7
@ -2564,6 +2564,7 @@ virJSONValueArrayForeachSteal;
|
||||
virJSONValueArrayGet;
|
||||
virJSONValueArraySize;
|
||||
virJSONValueArraySteal;
|
||||
virJSONValueArrayToStringList;
|
||||
virJSONValueCopy;
|
||||
virJSONValueFree;
|
||||
virJSONValueFromString;
|
||||
|
@ -1316,10 +1316,7 @@ virJSONValueObjectStealObject(virJSONValue *object,
|
||||
char **
|
||||
virJSONValueObjectGetStringArray(virJSONValue *object, const char *key)
|
||||
{
|
||||
g_auto(GStrv) ret = NULL;
|
||||
virJSONValue *data;
|
||||
size_t n;
|
||||
size_t i;
|
||||
|
||||
data = virJSONValueObjectGetArray(object, key);
|
||||
if (!data) {
|
||||
@ -1329,32 +1326,40 @@ virJSONValueObjectGetStringArray(virJSONValue *object, const char *key)
|
||||
return NULL;
|
||||
}
|
||||
|
||||
n = virJSONValueArraySize(data);
|
||||
ret = g_new0(char *, n + 1);
|
||||
return virJSONValueArrayToStringList(data);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virJSONValueArrayToStringList:
|
||||
* @data: a JSON array containing strings to convert
|
||||
*
|
||||
* Converts @data a JSON array containing strings to a NULL-terminated string
|
||||
* list. @data must be a JSON array. In case @data is doesn't contain only
|
||||
* strings an error is reported.
|
||||
*/
|
||||
char **
|
||||
virJSONValueArrayToStringList(virJSONValue *data)
|
||||
{
|
||||
size_t n = virJSONValueArraySize(data);
|
||||
g_auto(GStrv) ret = g_new0(char *, n + 1);
|
||||
size_t i;
|
||||
|
||||
for (i = 0; i < n; i++) {
|
||||
virJSONValue *child = virJSONValueArrayGet(data, i);
|
||||
const char *tmp;
|
||||
|
||||
if (!child) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("%s array element is missing item %zu"),
|
||||
key, i);
|
||||
if (!child ||
|
||||
!(ret[i] = g_strdup(virJSONValueGetString(child)))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR, "%s",
|
||||
_("JSON string array contains non-string element"));
|
||||
return NULL;
|
||||
}
|
||||
|
||||
if (!(tmp = virJSONValueGetString(child))) {
|
||||
virReportError(VIR_ERR_INTERNAL_ERROR,
|
||||
_("%s array element does not contain a string"),
|
||||
key);
|
||||
return NULL;
|
||||
}
|
||||
|
||||
ret[i] = g_strdup(tmp);
|
||||
}
|
||||
|
||||
return g_steal_pointer(&ret);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* virJSONValueObjectForeachKeyValue:
|
||||
* @object: JSON object to iterate
|
||||
|
@ -172,6 +172,8 @@ virJSONValueObjectGetString(virJSONValue *object,
|
||||
char **
|
||||
virJSONValueObjectGetStringArray(virJSONValue *object,
|
||||
const char *key);
|
||||
char **
|
||||
virJSONValueArrayToStringList(virJSONValue *data);
|
||||
const char *
|
||||
virJSONValueObjectGetStringOrNumber(virJSONValue *object,
|
||||
const char *key);
|
||||
|
Loading…
Reference in New Issue
Block a user