[libvirt PATCH 2/2] esx: switch esxUtil_ResolveHostname to return a new string
Laine Stump
laine at redhat.com
Mon Oct 5 13:37:54 UTC 2020
On 10/5/20 7:41 AM, Pino Toscano wrote:
> Change the interface of esxUtil_ResolveHostname() to return a newly
> allocated string with the result address, instead of forcing the callers
> to provide a buffer and its size. This way we can simply (auto)free the
> string, and make the function stacks smaller.
>
> Signed-off-by: Pino Toscano <ptoscano at redhat.com>
Reviewed-by: Laine Stump <laine at redhat.com>
> ---
> src/esx/esx_driver.c | 20 +++++++-------------
> src/esx/esx_util.c | 11 +++++++----
> src/esx/esx_util.h | 3 +--
> 3 files changed, 15 insertions(+), 19 deletions(-)
>
> diff --git a/src/esx/esx_driver.c b/src/esx/esx_driver.c
> index e82e5ed835..a17bf58a51 100644
> --- a/src/esx/esx_driver.c
> +++ b/src/esx/esx_driver.c
> @@ -602,7 +602,7 @@ esxConnectToHost(esxPrivate *priv,
> char **vCenterIPAddress)
> {
> int result = -1;
> - char ipAddress[NI_MAXHOST] = "";
> + g_autofree char *ipAddress = NULL;
> char *username = NULL;
> char *password = NULL;
> char *url = NULL;
> @@ -615,7 +615,7 @@ esxConnectToHost(esxPrivate *priv,
>
> ESX_VI_CHECK_ARG_LIST(vCenterIPAddress);
>
> - if (esxUtil_ResolveHostname(conn->uri->server, ipAddress, NI_MAXHOST) < 0)
> + if (esxUtil_ResolveHostname(conn->uri->server, &ipAddress) < 0)
> return -1;
>
> if (conn->uri->user) {
> @@ -692,7 +692,7 @@ esxConnectToVCenter(esxPrivate *priv,
> const char *hostSystemIPAddress)
> {
> int result = -1;
> - char ipAddress[NI_MAXHOST] = "";
> + g_autofree char *ipAddress = NULL;
> char *username = NULL;
> char *password = NULL;
> char *url = NULL;
> @@ -704,7 +704,7 @@ esxConnectToVCenter(esxPrivate *priv,
> return -1;
> }
>
> - if (esxUtil_ResolveHostname(hostname, ipAddress, NI_MAXHOST) < 0)
> + if (esxUtil_ResolveHostname(hostname, &ipAddress) < 0)
> return -1;
>
> if (conn->uri->user) {
> @@ -813,7 +813,7 @@ esxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
> virDrvOpenStatus result = VIR_DRV_OPEN_ERROR;
> esxPrivate *priv = NULL;
> char *potentialVCenterIPAddress = NULL;
> - char vCenterIPAddress[NI_MAXHOST] = "";
> + g_autofree char *vCenterIPAddress = NULL;
>
> virCheckFlags(VIR_CONNECT_RO, VIR_DRV_OPEN_ERROR);
>
> @@ -875,16 +875,10 @@ esxConnectOpen(virConnectPtr conn, virConnectAuthPtr auth,
> goto cleanup;
> }
>
> - if (virStrcpyStatic(vCenterIPAddress,
> - potentialVCenterIPAddress) < 0) {
> - virReportError(VIR_ERR_INTERNAL_ERROR,
> - _("vCenter IP address %s too big for destination"),
> - potentialVCenterIPAddress);
> - goto cleanup;
> - }
> + vCenterIPAddress = g_strdup(potentialVCenterIPAddress);
> } else {
> if (esxUtil_ResolveHostname(priv->parsedUri->vCenter,
> - vCenterIPAddress, NI_MAXHOST) < 0) {
> + &vCenterIPAddress) < 0) {
> goto cleanup;
> }
>
> diff --git a/src/esx/esx_util.c b/src/esx/esx_util.c
> index 555158f953..d9e7641d67 100644
> --- a/src/esx/esx_util.c
> +++ b/src/esx/esx_util.c
> @@ -278,12 +278,12 @@ esxUtil_ParseDatastorePath(const char *datastorePath, char **datastoreName,
>
>
> int
> -esxUtil_ResolveHostname(const char *hostname,
> - char *ipAddress, size_t ipAddress_length)
> +esxUtil_ResolveHostname(const char *hostname, char **ipAddress)
> {
> struct addrinfo hints;
> struct addrinfo *result = NULL;
> int errcode;
> + g_autofree char *address = NULL;
>
> memset(&hints, 0, sizeof(hints));
>
> @@ -308,8 +308,9 @@ esxUtil_ResolveHostname(const char *hostname,
> return -1;
> }
>
> - errcode = getnameinfo(result->ai_addr, result->ai_addrlen, ipAddress,
> - ipAddress_length, NULL, 0, NI_NUMERICHOST);
> + address = g_new0(char, NI_MAXHOST);
> + errcode = getnameinfo(result->ai_addr, result->ai_addrlen, address,
> + NI_MAXHOST, NULL, 0, NI_NUMERICHOST);
> freeaddrinfo(result);
>
> if (errcode != 0) {
> @@ -319,6 +320,8 @@ esxUtil_ResolveHostname(const char *hostname,
> return -1;
> }
>
> + *ipAddress = g_strdup(address);
> +
> return 0;
> }
>
> diff --git a/src/esx/esx_util.h b/src/esx/esx_util.h
> index 97b6d82a2b..9bfbff1d42 100644
> --- a/src/esx/esx_util.h
> +++ b/src/esx/esx_util.h
> @@ -55,8 +55,7 @@ int esxUtil_ParseVirtualMachineIDString(const char *id_string, int *id);
> int esxUtil_ParseDatastorePath(const char *datastorePath, char **datastoreName,
> char **directoryName, char **directoryAndFileName);
>
> -int esxUtil_ResolveHostname(const char *hostname,
> - char *ipAddress, size_t ipAddress_length);
> +int esxUtil_ResolveHostname(const char *hostname, char **ipAddress);
>
> int esxUtil_ReformatUuid(const char *input, char *output);
>
More information about the libvir-list
mailing list