[libvirt] [PATCH v3 19/34] Adapt to VIR_STRDUP and VIR_STRNDUP in src/rpc/*

Michal Privoznik mprivozn at redhat.com
Fri May 3 14:53:24 UTC 2013


---
 src/rpc/gendispatch.pl       | 21 ++++--------
 src/rpc/virnetclient.c       | 16 ++++------
 src/rpc/virnetmessage.c      | 12 ++++---
 src/rpc/virnetsaslcontext.c  |  6 ++--
 src/rpc/virnetserver.c       |  6 ++--
 src/rpc/virnetserverclient.c | 10 ++----
 src/rpc/virnetservermdns.c   |  6 ++--
 src/rpc/virnetsocket.c       | 10 +++---
 src/rpc/virnetsshsession.c   | 76 ++++++++++++++++++++++----------------------
 src/rpc/virnettlscontext.c   | 26 +++++++--------
 10 files changed, 82 insertions(+), 107 deletions(-)

diff --git a/src/rpc/gendispatch.pl b/src/rpc/gendispatch.pl
index 8d3b013..8c83cd2 100755
--- a/src/rpc/gendispatch.pl
+++ b/src/rpc/gendispatch.pl
@@ -610,12 +610,10 @@ elsif ($mode eq "server") {
                         # SPECIAL: virConnectGetType returns a constant string that must
                         #          not be freed. Therefore, duplicate the string here.
                         push(@vars_list, "const char *$1");
-                        push(@ret_list, "/* We have to strdup because remoteDispatchClientRequest will");
+                        push(@ret_list, "/* We have to VIR_STRDUP because remoteDispatchClientRequest will");
                         push(@ret_list, " * free this string after it's been serialised. */");
-                        push(@ret_list, "if (!(ret->type = strdup(type))) {");
-                        push(@ret_list, "    virReportOOMError();");
+                        push(@ret_list, "if (VIR_STRDUP(ret->type, type) < 0)");
                         push(@ret_list, "    goto cleanup;");
-                        push(@ret_list, "}");
                     } else {
                         push(@vars_list, "char *$1");
                         push(@ret_list, "ret->$1 = $1;");
@@ -636,11 +634,8 @@ elsif ($mode eq "server") {
                          "        goto cleanup;\n" .
                          "    }\n" .
                          "    \n" .
-                         "    *$1_p = strdup($1);\n" .
-                         "    if (*$1_p == NULL) {\n" .
-                         "        virReportOOMError();\n" .
-                         "        goto cleanup;\n" .
-                         "    }\n");
+                         "    if (VIR_STRDUP(*$1_p, $1) < 0)\n".
+                         "        goto cleanup;\n");
 
                     $single_ret_var = $1;
                     $single_ret_by_ref = 0;
@@ -1562,16 +1557,14 @@ elsif ($mode eq "client") {
             print "\n";
             print "    /* This call is caller-frees (although that isn't clear from\n";
             print "     * the documentation).  However xdr_free will free up both the\n";
-            print "     * names and the list of pointers, so we have to strdup the\n";
+            print "     * names and the list of pointers, so we have to VIR_STRDUP the\n";
             print "     * names here. */\n";
             print "    for (i = 0; i < ret.$single_ret_list_name.${single_ret_list_name}_len; ++i) {\n";
-            print "        ${single_ret_list_name}[i] = strdup(ret.$single_ret_list_name.${single_ret_list_name}_val[i]);\n";
-            print "\n";
-            print "        if (${single_ret_list_name}[i] == NULL) {\n";
+            print "        if (VIR_STRDUP(${single_ret_list_name}[i],\n";
+            print "                       ret.$single_ret_list_name.${single_ret_list_name}_val[i]) < 0) {\n";
             print "            for (--i; i >= 0; --i)\n";
             print "                VIR_FREE(${single_ret_list_name}[i]);\n";
             print "\n";
-            print "            virReportOOMError();\n";
             print "            goto cleanup;\n";
             print "        }\n";
             print "    }\n";
diff --git a/src/rpc/virnetclient.c b/src/rpc/virnetclient.c
index 1d228f0..bdbb9fe 100644
--- a/src/rpc/virnetclient.c
+++ b/src/rpc/virnetclient.c
@@ -36,6 +36,7 @@
 #include "virlog.h"
 #include "virutil.h"
 #include "virerror.h"
+#include "virstring.h"
 
 #define VIR_FROM_THIS VIR_FROM_RPC
 
@@ -317,17 +318,14 @@ static virNetClientPtr virNetClientNew(virNetSocketPtr sock,
     client->wakeupSendFD = wakeupFD[1];
     wakeupFD[0] = wakeupFD[1] = -1;
 
-    if (hostname &&
-        !(client->hostname = strdup(hostname)))
-        goto no_memory;
+    if (hostname && VIR_STRDUP(client->hostname, hostname) < 0)
+        goto error;
 
     PROBE(RPC_CLIENT_NEW,
           "client=%p sock=%p",
           client, client->sock);
     return client;
 
-no_memory:
-    virReportOOMError();
 error:
     VIR_FORCE_CLOSE(wakeupFD[0]);
     VIR_FORCE_CLOSE(wakeupFD[1]);
@@ -414,8 +412,8 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host,
                     goto no_memory;
             }
         } else {
-            if (!(knownhosts = strdup(knownHostsPath)))
-                goto no_memory;
+            if (VIR_STRDUP(knownhosts, knownHostsPath) < 0)
+                goto cleanup;
         }
     }
 
@@ -438,8 +436,8 @@ virNetClientPtr virNetClientNewLibSSH2(const char *host,
                     VIR_FREE(privkey);
             }
         } else {
-            if (!(privkey = strdup(privkeyPath)))
-                goto no_memory;
+            if (VIR_STRDUP(privkey, privkeyPath) < 0)
+                goto cleanup;
         }
     }
 
diff --git a/src/rpc/virnetmessage.c b/src/rpc/virnetmessage.c
index 647fef7..9e8a568 100644
--- a/src/rpc/virnetmessage.c
+++ b/src/rpc/virnetmessage.c
@@ -29,6 +29,7 @@
 #include "virlog.h"
 #include "virfile.h"
 #include "virutil.h"
+#include "virstring.h"
 
 #define VIR_FROM_THIS VIR_FROM_RPC
 
@@ -485,21 +486,22 @@ void virNetMessageSaveError(virNetMessageErrorPtr rerr)
         rerr->code = verr->code;
         rerr->domain = verr->domain;
         if (verr->message && VIR_ALLOC(rerr->message) == 0)
-            *rerr->message = strdup(verr->message);
+            ignore_value(VIR_STRDUP_QUIET(*rerr->message, verr->message));
         rerr->level = verr->level;
         if (verr->str1 && VIR_ALLOC(rerr->str1) == 0)
-            *rerr->str1 = strdup(verr->str1);
+            ignore_value(VIR_STRDUP_QUIET(*rerr->str1, verr->str1));
         if (verr->str2 && VIR_ALLOC(rerr->str2) == 0)
-            *rerr->str2 = strdup(verr->str2);
+            ignore_value(VIR_STRDUP_QUIET(*rerr->str2, verr->str2));
         if (verr->str3 && VIR_ALLOC(rerr->str3) == 0)
-            *rerr->str3 = strdup(verr->str3);
+            ignore_value(VIR_STRDUP_QUIET(*rerr->str3, verr->str3));
         rerr->int1 = verr->int1;
         rerr->int2 = verr->int2;
     } else {
         rerr->code = VIR_ERR_INTERNAL_ERROR;
         rerr->domain = VIR_FROM_RPC;
         if (VIR_ALLOC(rerr->message) == 0)
-            *rerr->message = strdup(_("Library function returned error but did not set virError"));
+            ignore_value(VIR_STRDUP_QUIET(*rerr->message,
+                                          _("Library function returned error but did not set virError")));
         rerr->level = VIR_ERR_ERROR;
     }
 }
diff --git a/src/rpc/virnetsaslcontext.c b/src/rpc/virnetsaslcontext.c
index 6943216..35dc6cf 100644
--- a/src/rpc/virnetsaslcontext.c
+++ b/src/rpc/virnetsaslcontext.c
@@ -29,6 +29,7 @@
 #include "viralloc.h"
 #include "virthread.h"
 #include "virlog.h"
+#include "virstring.h"
 
 #define VIR_FROM_THIS VIR_FROM_RPC
 
@@ -385,10 +386,7 @@ char *virNetSASLSessionListMechanisms(virNetSASLSessionPtr sasl)
                        err, sasl_errdetail(sasl->conn));
         goto cleanup;
     }
-    if (!(ret = strdup(mechlist))) {
-        virReportOOMError();
-        goto cleanup;
-    }
+    ignore_value(VIR_STRDUP(ret, mechlist));
 
 cleanup:
     virObjectUnlock(sasl);
diff --git a/src/rpc/virnetserver.c b/src/rpc/virnetserver.c
index e536cc3..6e73832 100644
--- a/src/rpc/virnetserver.c
+++ b/src/rpc/virnetserver.c
@@ -37,6 +37,7 @@
 #include "virfile.h"
 #include "virnetservermdns.h"
 #include "virdbus.h"
+#include "virstring.h"
 
 #ifndef SA_SIGINFO
 # define SA_SIGINFO 0
@@ -387,11 +388,8 @@ virNetServerPtr virNetServerNew(size_t min_workers,
     srv->privileged = geteuid() == 0;
     srv->autoShutdownInhibitFd = -1;
 
-    if (mdnsGroupName &&
-        !(srv->mdnsGroupName = strdup(mdnsGroupName))) {
-        virReportOOMError();
+    if (mdnsGroupName && VIR_STRDUP(srv->mdnsGroupName, mdnsGroupName) < 0)
         goto error;
-    }
     if (srv->mdnsGroupName) {
         if (!(srv->mdns = virNetServerMDNSNew()))
             goto error;
diff --git a/src/rpc/virnetserverclient.c b/src/rpc/virnetserverclient.c
index 2bde5c7..fcc3f5c 100644
--- a/src/rpc/virnetserverclient.c
+++ b/src/rpc/virnetserverclient.c
@@ -681,22 +681,16 @@ virNetServerClientCreateIdentity(virNetServerClientPtr client)
 #if WITH_SASL
     if (client->sasl) {
         const char *identity = virNetSASLSessionGetIdentity(client->sasl);
-        if (identity &&
-            !(saslname = strdup(identity))) {
-            virReportOOMError();
+        if (identity && VIR_STRDUP(saslname, identity) < 0)
             goto cleanup;
-        }
     }
 #endif
 
 #if WITH_GNUTLS
     if (client->tls) {
         const char *identity = virNetTLSSessionGetX509DName(client->tls);
-        if (identity &&
-            !(x509dname = strdup(identity))) {
-            virReportOOMError();
+        if (identity && VIR_STRDUP(x509dname, identity) < 0)
             goto cleanup;
-        }
     }
 #endif
 
diff --git a/src/rpc/virnetservermdns.c b/src/rpc/virnetservermdns.c
index 26e24d5..68d5e4e 100644
--- a/src/rpc/virnetservermdns.c
+++ b/src/rpc/virnetservermdns.c
@@ -479,9 +479,8 @@ virNetServerMDNSGroupPtr virNetServerMDNSAddGroup(virNetServerMDNS *mdns,
         return NULL;
     }
 
-    if (!(group->name = strdup(name))) {
+    if (VIR_STRDUP(group->name, name) < 0) {
         VIR_FREE(group);
-        virReportOOMError();
         return NULL;
     }
     group->mdns = mdns;
@@ -525,9 +524,8 @@ virNetServerMDNSEntryPtr virNetServerMDNSAddEntry(virNetServerMDNSGroupPtr group
     }
 
     entry->port = port;
-    if (!(entry->type = strdup(type))) {
+    if (VIR_STRDUP(entry->type, type) < 0) {
         VIR_FREE(entry);
-        virReportOOMError();
         return NULL;
     }
     entry->next = group->entry;
diff --git a/src/rpc/virnetsocket.c b/src/rpc/virnetsocket.c
index e950d7f..c1fa3f3 100644
--- a/src/rpc/virnetsocket.c
+++ b/src/rpc/virnetsocket.c
@@ -800,10 +800,10 @@ virNetSocketNewConnectLibSSH2(const char *host,
     if (virNetSSHSessionSetChannelCommand(sess, command) != 0)
         goto error;
 
-    if (!(authMethodNext = authMethodsCopy = strdup(authMethods))) {
-        virReportOOMError();
+    if (VIR_STRDUP(authMethodsCopy, authMethods) < 0)
         goto error;
-    }
+
+    authMethodNext = authMethodsCopy;
 
     while ((authMethod = strsep(&authMethodNext, ","))) {
         if (STRCASEEQ(authMethod, "keyboard-interactive"))
@@ -1180,10 +1180,8 @@ int virNetSocketGetSecurityContext(virNetSocketPtr sock,
         goto cleanup;
     }
 
-    if (!(*context = strdup(seccon))) {
-        virReportOOMError();
+    if (VIR_STRDUP(*context, seccon) < 0)
         goto cleanup;
-    }
 
     ret = 0;
 cleanup:
diff --git a/src/rpc/virnetsshsession.c b/src/rpc/virnetsshsession.c
index 27750fc..a10868d 100644
--- a/src/rpc/virnetsshsession.c
+++ b/src/rpc/virnetsshsession.c
@@ -233,7 +233,7 @@ virNetSSHKbIntCb(const char *name ATTRIBUTE_UNUSED,
 
     /* fill data structures for auth callback */
     for (i = 0; i < num_prompts; i++) {
-        if (!(askcred[i].prompt = strdup(prompts[i].text))) {
+        if (VIR_STRDUP(askcred[i].prompt, prompts[i].text) < 0) {
             priv->authCbErr = VIR_NET_SSH_AUTHCB_OOM;
             goto cleanup;
         }
@@ -959,12 +959,14 @@ virNetSSHSessionAuthAddPasswordAuth(virNetSSHSessionPtr sess,
 
     virObjectLock(sess);
 
-    if (!(user = strdup(username)) ||
-        !(pass = strdup(password)))
-        goto no_memory;
+    if (VIR_STRDUP(user, username) < 0 ||
+        VIR_STRDUP(pass, password) < 0)
+        goto error;
 
-    if (!(auth = virNetSSHSessionAuthMethodNew(sess)))
-        goto no_memory;
+    if (!(auth = virNetSSHSessionAuthMethodNew(sess))) {
+        virReportOOMError();
+        goto error;
+    }
 
     auth->username = user;
     auth->password = pass;
@@ -973,10 +975,9 @@ virNetSSHSessionAuthAddPasswordAuth(virNetSSHSessionPtr sess,
     virObjectUnlock(sess);
     return 0;
 
-no_memory:
+error:
     VIR_FREE(user);
     VIR_FREE(pass);
-    virReportOOMError();
     virObjectUnlock(sess);
     return -1;
 }
@@ -997,11 +998,13 @@ virNetSSHSessionAuthAddAgentAuth(virNetSSHSessionPtr sess,
 
     virObjectLock(sess);
 
-    if (!(user = strdup(username)))
-        goto no_memory;
+    if (VIR_STRDUP(user, username) < 0)
+        goto error;
 
-    if (!(auth = virNetSSHSessionAuthMethodNew(sess)))
-        goto no_memory;
+    if (!(auth = virNetSSHSessionAuthMethodNew(sess))) {
+        virReportOOMError();
+        goto error;
+    }
 
     auth->username = user;
     auth->method = VIR_NET_SSH_AUTH_AGENT;
@@ -1009,9 +1012,8 @@ virNetSSHSessionAuthAddAgentAuth(virNetSSHSessionPtr sess,
     virObjectUnlock(sess);
     return 0;
 
-no_memory:
+error:
     VIR_FREE(user);
-    virReportOOMError();
     virObjectUnlock(sess);
     return -1;
 }
@@ -1037,15 +1039,17 @@ virNetSSHSessionAuthAddPrivKeyAuth(virNetSSHSessionPtr sess,
 
     virObjectLock(sess);
 
-    if (!(user = strdup(username)) ||
-        !(file = strdup(keyfile)))
-        goto no_memory;
+    if (VIR_STRDUP(user, username) < 0 ||
+        VIR_STRDUP(file, keyfile) < 0)
+        goto error;
 
-    if (password && !(pass = strdup(password)))
-        goto no_memory;
+    if (password && VIR_STRDUP(pass, password) < 0)
+        goto error;
 
-    if (!(auth = virNetSSHSessionAuthMethodNew(sess)))
-        goto no_memory;
+    if (!(auth = virNetSSHSessionAuthMethodNew(sess))) {
+        virReportOOMError();
+        goto error;
+    }
 
     auth->username = user;
     auth->password = pass;
@@ -1055,11 +1059,10 @@ virNetSSHSessionAuthAddPrivKeyAuth(virNetSSHSessionPtr sess,
     virObjectUnlock(sess);
     return 0;
 
-no_memory:
+error:
     VIR_FREE(user);
     VIR_FREE(pass);
     VIR_FREE(file);
-    virReportOOMError();
     virObjectUnlock(sess);
     return -1;
 }
@@ -1081,11 +1084,13 @@ virNetSSHSessionAuthAddKeyboardAuth(virNetSSHSessionPtr sess,
 
     virObjectLock(sess);
 
-    if (!(user = strdup(username)))
-        goto no_memory;
+    if (VIR_STRDUP(user, username) < 0)
+        goto error;
 
-    if (!(auth = virNetSSHSessionAuthMethodNew(sess)))
-        goto no_memory;
+    if (!(auth = virNetSSHSessionAuthMethodNew(sess))) {
+        virReportOOMError();
+        goto error;
+    }
 
     auth->username = user;
     auth->tries = tries;
@@ -1094,9 +1099,8 @@ virNetSSHSessionAuthAddKeyboardAuth(virNetSSHSessionPtr sess,
     virObjectUnlock(sess);
     return 0;
 
-no_memory:
+error:
     VIR_FREE(user);
-    virReportOOMError();
     virObjectUnlock(sess);
     return -1;
 
@@ -1111,10 +1115,8 @@ virNetSSHSessionSetChannelCommand(virNetSSHSessionPtr sess,
 
     VIR_FREE(sess->channelCommand);
 
-    if (command && !(sess->channelCommand = strdup(command))) {
-        virReportOOMError();
+    if (command && VIR_STRDUP(sess->channelCommand, command) < 0)
         ret = -1;
-    }
 
     virObjectUnlock(sess);
     return ret;
@@ -1137,8 +1139,8 @@ virNetSSHSessionSetHostKeyVerification(virNetSSHSessionPtr sess,
 
     VIR_FREE(sess->hostname);
 
-    if (hostname && !(sess->hostname = strdup(hostname)))
-        goto no_memory;
+    if (hostname && VIR_STRDUP(sess->hostname, hostname) < 0)
+        goto error;
 
     /* load the known hosts file */
     if (hostsfile) {
@@ -1162,16 +1164,14 @@ virNetSSHSessionSetHostKeyVerification(virNetSSHSessionPtr sess,
         /* set filename only if writing to the known hosts file is requested */
         if (!(flags & VIR_NET_SSH_HOSTKEY_FILE_READONLY)) {
             VIR_FREE(sess->knownHostsFile);
-            if (!(sess->knownHostsFile = strdup(hostsfile)))
-                goto no_memory;
+            if (VIR_STRDUP(sess->knownHostsFile, hostsfile) < 0)
+                goto error;
         }
     }
 
     virObjectUnlock(sess);
     return 0;
 
-no_memory:
-    virReportOOMError();
 error:
     virObjectUnlock(sess);
     return -1;
diff --git a/src/rpc/virnettlscontext.c b/src/rpc/virnettlscontext.c
index 7f5975d..fcfeebb 100644
--- a/src/rpc/virnettlscontext.c
+++ b/src/rpc/virnettlscontext.c
@@ -836,23 +836,23 @@ static int virNetTLSContextLocateCredentials(const char *pkipath,
      */
     if (!*cacert) {
         VIR_DEBUG("Using default TLS CA certificate path");
-        if (!(*cacert = strdup(LIBVIRT_CACERT)))
-            goto out_of_memory;
+        if (VIR_STRDUP(*cacert, LIBVIRT_CACERT) < 0)
+            goto error;
     }
 
     if (!*cacrl) {
         VIR_DEBUG("Using default TLS CA revocation list path");
-        if (!(*cacrl = strdup(LIBVIRT_CACRL)))
-            goto out_of_memory;
+        if (VIR_STRDUP(*cacrl, LIBVIRT_CACRL) < 0)
+            goto error;
     }
 
     if (!*key && !*cert) {
         VIR_DEBUG("Using default TLS key/certificate path");
-        if (!(*key = strdup(isServer ? LIBVIRT_SERVERKEY : LIBVIRT_CLIENTKEY)))
-            goto out_of_memory;
+        if (VIR_STRDUP(*key, isServer ? LIBVIRT_SERVERKEY : LIBVIRT_CLIENTKEY) < 0)
+            goto error;
 
-        if (!(*cert = strdup(isServer ? LIBVIRT_SERVERCERT : LIBVIRT_CLIENTCERT)))
-            goto out_of_memory;
+        if (VIR_STRDUP(*cert, isServer ? LIBVIRT_SERVERCERT : LIBVIRT_CLIENTCERT) < 0)
+            goto error;
     }
 
     VIR_FREE(user_pki_path);
@@ -862,6 +862,7 @@ static int virNetTLSContextLocateCredentials(const char *pkipath,
 
 out_of_memory:
     virReportOOMError();
+error:
     VIR_FREE(*cacert);
     VIR_FREE(*cacrl);
     VIR_FREE(*key);
@@ -1028,10 +1029,8 @@ static int virNetTLSContextValidCertificate(virNetTLSContextPtr ctxt,
                                "[session]", gnutls_strerror(ret));
                 goto authfail;
             }
-            if (!(sess->x509dname = strdup(dname))) {
-                virReportOOMError();
+            if (VIR_STRDUP(sess->x509dname, dname) < 0)
                 goto authfail;
-            }
             VIR_DEBUG("Peer DN is %s", dname);
 
             if (virNetTLSContextCheckCertDN(cert, "[session]", sess->hostname, dname,
@@ -1168,11 +1167,8 @@ virNetTLSSessionPtr virNetTLSSessionNew(virNetTLSContextPtr ctxt,
     if (!(sess = virObjectLockableNew(virNetTLSSessionClass)))
         return NULL;
 
-    if (hostname &&
-        !(sess->hostname = strdup(hostname))) {
-        virReportOOMError();
+    if (hostname && VIR_STRDUP(sess->hostname, hostname) < 0)
         goto error;
-    }
 
     if ((err = gnutls_init(&sess->session,
                            ctxt->isServer ? GNUTLS_SERVER : GNUTLS_CLIENT)) != 0) {
-- 
1.8.1.5




More information about the libvir-list mailing list