[libvirt PATCH 2/2] esx: switch esxUtil_ResolveHostname to return a new string

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

 



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@xxxxxxxxxx>
---
 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);
 
-- 
2.26.2




[Index of Archives]     [Virt Tools]     [Libvirt Users]     [Lib OS Info]     [Fedora Users]     [Fedora Desktop]     [Fedora SELinux]     [Big List of Linux Books]     [Yosemite News]     [KDE Users]     [Fedora Tools]

  Powered by Linux