diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms index f581676227..581857deb9 100644 --- a/src/libvirt_private.syms +++ b/src/libvirt_private.syms @@ -2409,6 +2409,7 @@ virJSONValueObjectGetNumberUint; virJSONValueObjectGetNumberUlong; virJSONValueObjectGetObject; virJSONValueObjectGetString; +virJSONValueObjectGetStringArray; virJSONValueObjectGetValue; virJSONValueObjectHasKey; virJSONValueObjectIsNull; diff --git a/src/util/virjson.c b/src/util/virjson.c index 3fa9a9ca24..d471923732 100644 --- a/src/util/virjson.c +++ b/src/util/virjson.c @@ -1463,6 +1463,43 @@ virJSONValueObjectIsNull(virJSONValuePtr object, return virJSONValueIsNull(val); } +char ** +virJSONValueObjectGetStringArray(virJSONValuePtr object, const char *key) +{ + g_auto(GStrv) ret = NULL; + virJSONValuePtr data; + size_t n; + size_t i; + + data = virJSONValueObjectGetArray(object, key); + if (!data) + return NULL; + + n = virJSONValueArraySize(data); + ret = g_new0(char *, n + 1); + for (i = 0; i < n; i++) { + virJSONValuePtr child = virJSONValueArrayGet(data, i); + const char *tmp; + + if (!child) { + virReportError(VIR_ERR_INTERNAL_ERROR, + _("%s array element is missing item %zu"), + key, i); + 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: diff --git a/src/util/virjson.h b/src/util/virjson.h index 588c977650..4dc7ed1a2d 100644 --- a/src/util/virjson.h +++ b/src/util/virjson.h @@ -117,6 +117,7 @@ virJSONValuePtr virJSONValueObjectStealObject(virJSONValuePtr object, const char *key); const char *virJSONValueObjectGetString(virJSONValuePtr object, const char *key); +char **virJSONValueObjectGetStringArray(virJSONValuePtr object, const char *key); const char *virJSONValueObjectGetStringOrNumber(virJSONValuePtr object, const char *key); int virJSONValueObjectGetNumberInt(virJSONValuePtr object, const char *key, int *value); int virJSONValueObjectGetNumberUint(virJSONValuePtr object, const char *key, unsigned int *value);