From 97ea8da183171e5f5847b1a2372d23136efd30a9 Mon Sep 17 00:00:00 2001 From: Peter Krempa Date: Thu, 20 Jul 2017 12:45:42 +0200 Subject: [PATCH] virStorageNetHostDef: Turn @port into integer Currently, @port is type of string. Well, that's overkill and waste of memory. Port is always an integer. Use it as such. Signed-off-by: Michal Privoznik --- src/conf/domain_conf.c | 20 +++++--- src/libxl/libxl_conf.c | 2 +- src/qemu/qemu_block.c | 7 ++- src/qemu/qemu_command.c | 11 ++--- src/qemu/qemu_parse_command.c | 13 +++-- src/storage/storage_backend_gluster.c | 17 ++----- src/storage/storage_driver.c | 7 +-- src/util/virstoragefile.c | 69 +++++++++++---------------- src/util/virstoragefile.h | 4 +- src/xenconfig/xen_xl.c | 2 +- 10 files changed, 68 insertions(+), 84 deletions(-) diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c index 7e820cee4c..d8b3c9b65c 100644 --- a/src/conf/domain_conf.c +++ b/src/conf/domain_conf.c @@ -6324,6 +6324,7 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode, { int ret = -1; char *transport = NULL; + char *port = NULL; virStorageNetHostDef host; memset(&host, 0, sizeof(host)); @@ -6365,7 +6366,10 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode, goto cleanup; } - host.port = virXMLPropString(hostnode, "port"); + if ((port = virXMLPropString(hostnode, "port"))) { + if (virStringParsePort(port, &host.port) < 0) + goto cleanup; + } } if (VIR_APPEND_ELEMENT(*hosts, *nhosts, host) < 0) @@ -6376,6 +6380,7 @@ virDomainStorageNetworkParseHost(xmlNodePtr hostnode, cleanup: virStorageNetHostDefClear(&host); VIR_FREE(transport); + VIR_FREE(port); return ret; } @@ -7780,8 +7785,8 @@ virDomainDiskSourceParse(xmlNodePtr node, if (virDomainStorageNetworkParseHosts(node, &src->hosts, &src->nhosts) < 0) goto cleanup; - if (virStorageSourceNetworkAssignDefaultPorts(src) < 0) - goto cleanup; + virStorageSourceNetworkAssignDefaultPorts(src); + break; case VIR_STORAGE_TYPE_VOLUME: if (virDomainDiskSourcePoolDefParse(node, &src->srcpool) < 0) @@ -14814,7 +14819,7 @@ virDomainHostdevMatchSubsysSCSIiSCSI(virDomainHostdevDefPtr first, &second->source.subsys.u.scsi.u.iscsi; if (STREQ(first_iscsisrc->hosts[0].name, second_iscsisrc->hosts[0].name) && - STREQ(first_iscsisrc->hosts[0].port, second_iscsisrc->hosts[0].port) && + first_iscsisrc->hosts[0].port == second_iscsisrc->hosts[0].port && STREQ(first_iscsisrc->path, second_iscsisrc->path)) return 1; return 0; @@ -21313,7 +21318,9 @@ virDomainDiskSourceFormatNetwork(virBufferPtr buf, for (n = 0; n < src->nhosts; n++) { virBufferAddLit(buf, "hosts[n].name); - virBufferEscapeString(buf, " port='%s'", src->hosts[n].port); + + if (src->hosts[n].port) + virBufferAsprintf(buf, " port='%u'", src->hosts[n].port); if (src->hosts[n].transport) virBufferAsprintf(buf, " transport='%s'", @@ -22160,7 +22167,8 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { virBufferAddLit(buf, "hosts[0].name); - virBufferEscapeString(buf, " port='%s'", iscsisrc->hosts[0].port); + if (iscsisrc->hosts[0].port) + virBufferAsprintf(buf, " port='%u'", iscsisrc->hosts[0].port); virBufferAddLit(buf, "/>\n"); } else { virBufferAsprintf(buf, "\n", diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c index a85bc71d2f..4416a09dde 100644 --- a/src/libxl/libxl_conf.c +++ b/src/libxl/libxl_conf.c @@ -706,7 +706,7 @@ libxlMakeNetworkDiskSrcStr(virStorageSourcePtr src, virBufferAsprintf(&buf, "%s", src->hosts[i].name); if (src->hosts[i].port) - virBufferAsprintf(&buf, "\\:%s", src->hosts[i].port); + virBufferAsprintf(&buf, "\\:%u", src->hosts[i].port); } } diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c index 93124c5ba4..22de706579 100644 --- a/src/qemu/qemu_block.c +++ b/src/qemu/qemu_block.c @@ -447,6 +447,7 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src, virJSONValuePtr ret = NULL; virStorageNetHostDefPtr host; const char *transport; + char *port = NULL; size_t i; if (!(servers = virJSONValueNewArray())) @@ -462,10 +463,13 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src, else transport = "inet"; + if (virAsprintf(&port, "%u", host->port) < 0) + goto cleanup; + if (virJSONValueObjectCreate(&server, "s:type", transport, "s:host", host->name, - "s:port", host->port, + "s:port", port, NULL) < 0) goto cleanup; break; @@ -497,6 +501,7 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src, cleanup: virJSONValueFree(servers); virJSONValueFree(server); + VIR_FREE(port); return ret; } diff --git a/src/qemu/qemu_command.c b/src/qemu/qemu_command.c index a85eb2ede3..d14bb62114 100644 --- a/src/qemu/qemu_command.c +++ b/src/qemu/qemu_command.c @@ -809,8 +809,7 @@ qemuBuildNetworkDriveURI(virStorageSourcePtr src, goto cleanup; if (src->hosts->transport == VIR_STORAGE_NET_HOST_TRANS_TCP) { - if (virStringParsePort(src->hosts->port, &uri->port) < 0) - goto cleanup; + uri->port = src->hosts->port; if (VIR_STRDUP(uri->scheme, virStorageNetProtocolTypeToString(src->protocol)) < 0) @@ -881,8 +880,8 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, switch (src->hosts->transport) { case VIR_STORAGE_NET_HOST_TRANS_TCP: - virBufferStrcat(&buf, src->hosts->name, ":", - src->hosts->port, NULL); + virBufferAsprintf(&buf, "%s:%u", + src->hosts->name, src->hosts->port); break; case VIR_STORAGE_NET_HOST_TRANS_UNIX: @@ -937,7 +936,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, if (virAsprintf(&ret, "sheepdog:%s", src->path) < 0) goto cleanup; } else if (src->nhosts == 1) { - if (virAsprintf(&ret, "sheepdog:%s:%s:%s", + if (virAsprintf(&ret, "sheepdog:%s:%u:%s", src->hosts->name, src->hosts->port, src->path) < 0) goto cleanup; @@ -979,7 +978,7 @@ qemuBuildNetworkDriveStr(virStorageSourcePtr src, virBufferAsprintf(&buf, "%s", src->hosts[i].name); if (src->hosts[i].port) - virBufferAsprintf(&buf, "\\:%s", src->hosts[i].port); + virBufferAsprintf(&buf, "\\:%u", src->hosts[i].port); } } diff --git a/src/qemu/qemu_parse_command.c b/src/qemu/qemu_parse_command.c index 90e8d09a2f..ee71127755 100644 --- a/src/qemu/qemu_parse_command.c +++ b/src/qemu/qemu_parse_command.c @@ -92,8 +92,7 @@ qemuParseDriveURIString(virDomainDiskDefPtr def, virURIPtr uri, if (VIR_STRDUP(def->src->hosts->name, uri->server) < 0) goto error; - if (virAsprintf(&def->src->hosts->port, "%d", uri->port) < 0) - goto error; + def->src->hosts->port = uri->port; } else { def->src->hosts->name = NULL; def->src->hosts->port = 0; @@ -240,7 +239,7 @@ qemuParseNBDString(virDomainDiskDefPtr disk) if (src) *src++ = '\0'; - if (VIR_STRDUP(h->port, port) < 0) + if (virStringParsePort(port, &h->port) < 0) goto error; } @@ -730,7 +729,7 @@ qemuParseCommandLineDisk(virDomainXMLOptionPtr xmlopt, goto error; def->src->nhosts = 1; def->src->hosts->name = def->src->path; - if (VIR_STRDUP(def->src->hosts->port, port) < 0) + if (virStringParsePort(port, &def->src->hosts->port) < 0) goto error; def->src->hosts->transport = VIR_STORAGE_NET_HOST_TRANS_TCP; def->src->hosts->socket = NULL; @@ -2005,7 +2004,7 @@ qemuParseCommandLine(virCapsPtr caps, goto error; disk->src->nhosts = 1; disk->src->hosts->name = disk->src->path; - if (VIR_STRDUP(disk->src->hosts->port, port) < 0) + if (virStringParsePort(port, &disk->src->hosts->port) < 0) goto error; if (VIR_STRDUP(disk->src->path, vdi) < 0) goto error; @@ -2541,12 +2540,12 @@ qemuParseCommandLine(virCapsPtr caps, port = strchr(token, ':'); if (port) { *port++ = '\0'; - if (VIR_STRDUP(port, port) < 0) { + if (virStringParsePort(port, + &first_rbd_disk->src->hosts[first_rbd_disk->src->nhosts].port) < 0) { VIR_FREE(hosts); goto error; } } - first_rbd_disk->src->hosts[first_rbd_disk->src->nhosts].port = port; if (VIR_STRDUP(first_rbd_disk->src->hosts[first_rbd_disk->src->nhosts].name, token) < 0) { VIR_FREE(hosts); diff --git a/src/storage/storage_backend_gluster.c b/src/storage/storage_backend_gluster.c index add8d34bf3..92038c1315 100644 --- a/src/storage/storage_backend_gluster.c +++ b/src/storage/storage_backend_gluster.c @@ -575,9 +575,8 @@ virStorageFileBackendGlusterDeinit(virStorageSourcePtr src) { virStorageFileBackendGlusterPrivPtr priv = src->drv->priv; - VIR_DEBUG("deinitializing gluster storage file %p (gluster://%s:%s/%s%s)", - src, src->hosts->name, src->hosts->port ? src->hosts->port : "0", - src->volume, src->path); + VIR_DEBUG("deinitializing gluster storage file %p (gluster://%s:%u/%s%s)", + src, src->hosts->name, src->hosts->port, src->volume, src->path); if (priv->vol) glfs_fini(priv->vol); @@ -599,15 +598,7 @@ virStorageFileBackendGlusterInitServer(virStorageFileBackendGlusterPrivPtr priv, case VIR_STORAGE_NET_HOST_TRANS_RDMA: case VIR_STORAGE_NET_HOST_TRANS_TCP: hoststr = host->name; - - if (host->port && - virStrToLong_i(host->port, NULL, 10, &port) < 0) { - virReportError(VIR_ERR_INTERNAL_ERROR, - _("failed to parse port number '%s'"), - host->port); - return -1; - } - + port = host->port; break; case VIR_STORAGE_NET_HOST_TRANS_UNIX: @@ -828,7 +819,7 @@ virStorageFileBackendGlusterGetUniqueIdentifier(virStorageSourcePtr src) priv))) return NULL; - ignore_value(virAsprintf(&priv->canonpath, "gluster://%s:%s/%s/%s", + ignore_value(virAsprintf(&priv->canonpath, "gluster://%s:%u/%s/%s", src->hosts->name, src->hosts->port, src->volume, diff --git a/src/storage/storage_driver.c b/src/storage/storage_driver.c index e616ae0561..855212063b 100644 --- a/src/storage/storage_driver.c +++ b/src/storage/storage_driver.c @@ -2783,11 +2783,8 @@ virStorageAddISCSIPoolSourceHost(virDomainDiskDefPtr def, if (VIR_STRDUP(def->src->hosts[0].name, pooldef->source.hosts[0].name) < 0) goto cleanup; - if (virAsprintf(&def->src->hosts[0].port, "%d", - pooldef->source.hosts[0].port ? - pooldef->source.hosts[0].port : - 3260) < 0) - goto cleanup; + def->src->hosts[0].port = pooldef->source.hosts[0].port ? + pooldef->source.hosts[0].port : 3260; /* iscsi volume has name like "unit:0:0:1" */ if (!(tokens = virStringSplit(def->src->srcpool->volume, ":", 0))) diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c index bc1b616d49..0add4c1463 100644 --- a/src/util/virstoragefile.c +++ b/src/util/virstoragefile.c @@ -1689,7 +1689,6 @@ virStorageNetHostDefClear(virStorageNetHostDefPtr def) return; VIR_FREE(def->name); - VIR_FREE(def->port); VIR_FREE(def->socket); } @@ -1736,13 +1735,11 @@ virStorageNetHostDefCopy(size_t nhosts, virStorageNetHostDefPtr dst = &ret[i]; dst->transport = src->transport; + dst->port = src->port; if (VIR_STRDUP(dst->name, src->name) < 0) goto error; - if (VIR_STRDUP(dst->port, src->port) < 0) - goto error; - if (VIR_STRDUP(dst->socket, src->socket) < 0) goto error; } @@ -2430,10 +2427,7 @@ virStorageSourceParseBackingURI(virStorageSourcePtr src, tmp[0] = '\0'; } - if (uri->port > 0) { - if (virAsprintf(&src->hosts->port, "%d", uri->port) < 0) - goto cleanup; - } + src->hosts->port = uri->port; if (VIR_STRDUP(src->hosts->name, uri->server) < 0) goto cleanup; @@ -2470,7 +2464,7 @@ virStorageSourceRBDAddHost(virStorageSourcePtr src, if (port) { *port = '\0'; port += skip; - if (VIR_STRDUP(src->hosts[src->nhosts - 1].port, port) < 0) + if (virStringParsePort(port, &src->hosts[src->nhosts - 1].port) < 0) goto error; } @@ -2488,7 +2482,6 @@ virStorageSourceRBDAddHost(virStorageSourcePtr src, return 0; error: - VIR_FREE(src->hosts[src->nhosts-1].port); VIR_FREE(src->hosts[src->nhosts-1].name); return -1; } @@ -2649,7 +2642,7 @@ virStorageSourceParseNBDColonString(const char *nbdstr, goto cleanup; } - if (VIR_STRDUP(src->hosts->port, backing[2]) < 0) + if (virStringParsePort(backing[2], &src->hosts->port) < 0) goto cleanup; } @@ -2825,7 +2818,7 @@ virStorageSourceParseBackingJSONInetSocketAddress(virStorageNetHostDefPtr host, host->transport = VIR_STORAGE_NET_HOST_TRANS_TCP; if (VIR_STRDUP(host->name, hostname) < 0 || - VIR_STRDUP(host->port, port) < 0) + virStringParsePort(port, &host->port) < 0) return -1; return 0; @@ -2985,12 +2978,9 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src, goto cleanup; if ((port = strchr(src->hosts->name, ':'))) { - if (VIR_STRDUP(src->hosts->port, port + 1) < 0) + if (virStringParsePort(port + 1, &src->hosts->port) < 0) goto cleanup; - if (strlen(src->hosts->port) == 0) - VIR_FREE(src->hosts->port); - *port = '\0'; } @@ -3050,7 +3040,7 @@ virStorageSourceParseBackingJSONNbd(virStorageSourcePtr src, if (VIR_STRDUP(src->hosts[0].name, host) < 0) return -1; - if (VIR_STRDUP(src->hosts[0].port, port) < 0) + if (virStringParsePort(port, &src->hosts[0].port) < 0) return -1; } } @@ -3136,8 +3126,9 @@ virStorageSourceParseBackingJSONSSH(virStorageSourcePtr src, return -1; } else { src->hosts[0].transport = VIR_STORAGE_NET_HOST_TRANS_TCP; + if (VIR_STRDUP(src->hosts[0].name, host) < 0 || - VIR_STRDUP(src->hosts[0].port, port) < 0) + virStringParsePort(port, &src->hosts[0].port) < 0) return -1; } @@ -3341,8 +3332,7 @@ virStorageSourceNewFromBackingAbsolute(const char *path) if (rc < 0) goto error; - if (virStorageSourceNetworkAssignDefaultPorts(ret) < 0) - goto error; + virStorageSourceNetworkAssignDefaultPorts(ret); } return ret; @@ -3964,66 +3954,61 @@ virStorageSourceFindByNodeName(virStorageSourcePtr top, } -static const char * +static unsigned int virStorageSourceNetworkDefaultPort(virStorageNetProtocol protocol) { switch (protocol) { case VIR_STORAGE_NET_PROTOCOL_HTTP: - return "80"; + return 80; case VIR_STORAGE_NET_PROTOCOL_HTTPS: - return "443"; + return 443; case VIR_STORAGE_NET_PROTOCOL_FTP: - return "21"; + return 21; case VIR_STORAGE_NET_PROTOCOL_FTPS: - return "990"; + return 990; case VIR_STORAGE_NET_PROTOCOL_TFTP: - return "69"; + return 69; case VIR_STORAGE_NET_PROTOCOL_SHEEPDOG: - return "7000"; + return 7000; case VIR_STORAGE_NET_PROTOCOL_NBD: - return "10809"; + return 10809; case VIR_STORAGE_NET_PROTOCOL_SSH: - return "22"; + return 22; case VIR_STORAGE_NET_PROTOCOL_ISCSI: - return "3260"; + return 3260; case VIR_STORAGE_NET_PROTOCOL_GLUSTER: - return "24007"; + return 24007; case VIR_STORAGE_NET_PROTOCOL_RBD: /* we don't provide a default for RBD */ - return NULL; + return 0; case VIR_STORAGE_NET_PROTOCOL_LAST: case VIR_STORAGE_NET_PROTOCOL_NONE: - return NULL; + return 0; } - return NULL; + return 0; } -int +void virStorageSourceNetworkAssignDefaultPorts(virStorageSourcePtr src) { size_t i; for (i = 0; i < src->nhosts; i++) { if (src->hosts[i].transport == VIR_STORAGE_NET_HOST_TRANS_TCP && - src->hosts[i].port == NULL) { - if (VIR_STRDUP(src->hosts[i].port, - virStorageSourceNetworkDefaultPort(src->protocol)) < 0) - return -1; - } + src->hosts[i].port == 0) + src->hosts[i].port = virStorageSourceNetworkDefaultPort(src->protocol); } - - return 0; } diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h index 98992e04ad..d1e8ffe07b 100644 --- a/src/util/virstoragefile.h +++ b/src/util/virstoragefile.h @@ -155,7 +155,7 @@ typedef struct _virStorageNetHostDef virStorageNetHostDef; typedef virStorageNetHostDef *virStorageNetHostDefPtr; struct _virStorageNetHostDef { char *name; - char *port; + unsigned int port; int transport; /* virStorageNetHostTransport */ char *socket; /* path to unix socket */ }; @@ -406,7 +406,7 @@ virStorageSourceFindByNodeName(virStorageSourcePtr top, unsigned int *index) ATTRIBUTE_NONNULL(1) ATTRIBUTE_NONNULL(2); -int +void virStorageSourceNetworkAssignDefaultPorts(virStorageSourcePtr src) ATTRIBUTE_NONNULL(1); diff --git a/src/xenconfig/xen_xl.c b/src/xenconfig/xen_xl.c index fa3f1d0034..d168d3fa43 100644 --- a/src/xenconfig/xen_xl.c +++ b/src/xenconfig/xen_xl.c @@ -1057,7 +1057,7 @@ xenFormatXLDiskSrcNet(virStorageSourcePtr src) virBufferAsprintf(&buf, "%s", src->hosts[i].name); if (src->hosts[i].port) - virBufferAsprintf(&buf, "\\\\:%s", src->hosts[i].port); + virBufferAsprintf(&buf, "\\\\:%u", src->hosts[i].port); } } -- GitLab