From 49ed98a4579744568b5c57f65ae08034d5c9568f Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Mon, 19 Jun 2017 14:42:18 +0200 Subject: [PATCH] util: storage: Split out parsing of TCP network host from JSON pseudoprotocol Few backing protocols support only TCP. Split out the function which will correspond to parsing qemu's InetSocketAddressBase. --- src/util/virstoragefile.c | 38 +++++++++++++++++++++++++------------- 1 file changed, 25 insertions(+), 13 deletions(-) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index 7f2a50fd16..9af0cdbcd3 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -2794,13 +2794,35 @@ virStorageSourceParseBackingJSONUri(virStorageSourcePtr src, } +static int +virStorageSourceParseBackingJSONInetSocketAddress(virStorageNetHostDefPtr host, + virJSONValuePtr json) +{ + const char *hostname = virJSONValueObjectGetString(json, "host"); + const char *port = virJSONValueObjectGetString(json, "port"); + + if (!hostname) { + virReportError(VIR_ERR_INVALID_ARG, "%s", + _("missing hostname for tcp backing server in " + "JSON backing volume definition")); + return -1; + } + + host->transport = VIR_STORAGE_NET_HOST_TRANS_TCP; + + if (VIR_STRDUP(host->name, hostname) < 0 || + VIR_STRDUP(host->port, port) < 0) + return -1; + + return 0; +} + + static int virStorageSourceParseBackingJSONSocketAddress(virStorageNetHostDefPtr host, virJSONValuePtr json) { const char *type = virJSONValueObjectGetString(json, "type"); - const char *hostname = virJSONValueObjectGetString(json, "host"); - const char *port = virJSONValueObjectGetString(json, "port"); const char *socket = virJSONValueObjectGetString(json, "socket"); if (!type) { @@ -2811,18 +2833,8 @@ virStorageSourceParseBackingJSONSocketAddress(virStorageNetHostDefPtr host, } if (STREQ(type, "tcp") || STREQ(type, "inet")) { - host->transport = VIR_STORAGE_NET_HOST_TRANS_TCP; + return virStorageSourceParseBackingJSONInetSocketAddress(host, json); - if (!hostname) { - virReportError(VIR_ERR_INVALID_ARG, "%s", - _("missing hostname for tcp backing server in " - "JSON backing volume definition")); - return -1; - } - - if (VIR_STRDUP(host->name, hostname) < 0 || - VIR_STRDUP(host->port, port) < 0) - return -1; } else if (STREQ(type, "unix")) { host->transport = VIR_STORAGE_NET_HOST_TRANS_UNIX;