On Wed, Jul 19, 2017 at 17:26:27 +0200, Michal Privoznik wrote: > 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 <mprivozn@xxxxxxxxxx> > --- > src/conf/domain_conf.c | 25 ++++++-- > src/libxl/libxl_conf.c | 2 +- > src/qemu/qemu_block.c | 2 +- > src/qemu/qemu_command.c | 28 ++------- > src/qemu/qemu_parse_command.c | 33 +++++++--- > src/storage/storage_backend_gluster.c | 17 ++--- > src/storage/storage_driver.c | 7 +-- > src/util/virstoragefile.c | 113 +++++++++++++++++++++------------- > src/util/virstoragefile.h | 4 +- > src/xenconfig/xen_xl.c | 2 +- > 10 files changed, 130 insertions(+), 103 deletions(-) > > diff --git a/src/conf/domain_conf.c b/src/conf/domain_conf.c > index 9320794de..e8fdaa36f 100644 > --- a/src/conf/domain_conf.c > +++ b/src/conf/domain_conf.c [...] > @@ -6486,7 +6487,15 @@ virDomainStorageHostParse(xmlNodePtr node, > goto cleanup; > } > > - host.port = virXMLPropString(child, "port"); > + port = virXMLPropString(child, "port"); > + if (port && > + (virStrToLong_i(port, NULL, 10, &host.port) < 0 || > + host.port < 0)) { > + virReportError(VIR_ERR_CONFIG_UNSUPPORTED, > + _("failed to parse port number '%s'"), > + port); > + goto cleanup; > + } > } 'port' is leaked when multiple <host> element are passed. > > if (VIR_APPEND_ELEMENT(*hosts, *nhosts, host) < 0) > @@ -14909,7 +14919,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; > @@ -22255,7 +22267,8 @@ virDomainHostdevDefFormatSubsys(virBufferPtr buf, > if (scsisrc->protocol == VIR_DOMAIN_HOSTDEV_SCSI_PROTOCOL_TYPE_ISCSI) { > virBufferAddLit(buf, "<host"); > virBufferEscapeString(buf, " name='%s'", iscsisrc->hosts[0].name); > - virBufferEscapeString(buf, " port='%s'", iscsisrc->hosts[0].port); > + if (iscsisrc->hosts[0].port) > + virBufferAsprintf(buf, " port='%d'", iscsisrc->hosts[0].port); > virBufferAddLit(buf, "/>\n"); > } else { > virBufferAsprintf(buf, "<adapter name='%s'/>\n", > diff --git a/src/libxl/libxl_conf.c b/src/libxl/libxl_conf.c > index a85bc71d2..1b20fb906 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, "\\:%d", src->hosts[i].port); > } > } > > diff --git a/src/qemu/qemu_block.c b/src/qemu/qemu_block.c > index 93124c5ba..3d64528a8 100644 > --- a/src/qemu/qemu_block.c > +++ b/src/qemu/qemu_block.c > @@ -465,7 +465,7 @@ qemuBlockStorageSourceBuildHostsJSONSocketAddress(virStorageSourcePtr src, > if (virJSONValueObjectCreate(&server, > "s:type", transport, > "s:host", host->name, > - "s:port", host->port, > + "i:port", host->port, > NULL) < 0) > goto cleanup; > break; > @@ -897,8 +880,7 @@ 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:%d", src->hosts->name, src->hosts->port); Line too long > @@ -953,9 +935,9 @@ 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:%d:%s", > src->hosts->name, > - src->hosts->port ? src->hosts->port : "7000", > + src->hosts->port ? src->hosts->port : 7000, Hmm, this was missed in my cleanup patch. > src->path) < 0) > goto cleanup; > } else { [...] > diff --git a/src/util/virstoragefile.c b/src/util/virstoragefile.c > index 2d0ff7812..bea4a42ad 100644 > --- a/src/util/virstoragefile.c > +++ b/src/util/virstoragefile.c > @@ -1688,8 +1688,8 @@ virStorageNetHostDefClear(virStorageNetHostDefPtr def) > if (!def) > return; > > + def->port = 0; 'transport' is not reset here, so port doesn't need to be either. > VIR_FREE(def->name); > - VIR_FREE(def->port); > VIR_FREE(def->socket); > @@ -2430,10 +2428,8 @@ virStorageSourceParseBackingURI(virStorageSourcePtr src, > tmp[0] = '\0'; > } > > - if (uri->port > 0) { > - if (virAsprintf(&src->hosts->port, "%d", uri->port) < 0) > - goto cleanup; > - } > + if (uri->port > 0) > + src->hosts->port = uri->port; The condition is redundant. > > if (VIR_STRDUP(src->hosts->name, uri->server) < 0) > goto cleanup; [...] > @@ -2638,7 +2639,7 @@ virStorageSourceParseNBDColonString(const char *nbdstr, > if (VIR_STRDUP(src->hosts->socket, backing[2]) < 0) > goto cleanup; > > - } else { > + } else { Surious change. > if (VIR_STRDUP(src->hosts->name, backing[1]) < 0) > goto cleanup; > [...] > @@ -2985,11 +2999,12 @@ virStorageSourceParseBackingJSONiSCSI(virStorageSourcePtr src, > goto cleanup; > > if ((port = strchr(src->hosts->name, ':'))) { > - if (VIR_STRDUP(src->hosts->port, port + 1) < 0) > - goto cleanup; > - > - if (strlen(src->hosts->port) == 0) > - VIR_FREE(src->hosts->port); > + if (virStrToLong_i(port + 1, NULL, 10, &src->hosts->port) < 0 || This will report the error if the port is not specified after the colon, whereas previously it would not. > + src->hosts->port < 0) { > + virReportError(VIR_ERR_INTERNAL_ERROR, > + _("failed to parse port number '%s'"), > + port + 1); > + } > > *port = '\0'; > } [...] > diff --git a/src/util/virstoragefile.h b/src/util/virstoragefile.h > index 98992e04a..934504806 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; > + int port; If you want to be precise ... have you ever seen negative ports? > int transport; /* virStorageNetHostTransport */ > char *socket; /* path to unix socket */ > }; This will require a lot of fixing since you blindly copied the check that also checks that the port is not less than 0.
Attachment:
signature.asc
Description: PGP signature
-- libvir-list mailing list libvir-list@xxxxxxxxxx https://www.redhat.com/mailman/listinfo/libvir-list