[libvirt] [PATCH 4/9] iptables.c: Use virStrerror, not strerror.

Jim Meyering jim at meyering.net
Wed Feb 4 12:07:49 UTC 2009


"Daniel P. Berrange" <berrange at redhat.com> wrote:
> On Mon, Feb 02, 2009 at 06:08:17PM +0100, Jim Meyering wrote:
>> From: Jim Meyering <meyering at redhat.com>
>> * src/iptables.c: Include "virterror_internal.h".
>> Use virStrerror, not strerror.
>> * src/virterror.c (virStrerror): Remove "static".
>> * src/virterror_internal.h (virStrerror): Declare it.
...
>> -static const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen)
>> +const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen)
...
>> +const char *virStrerror(int theerrno, char *errBuf, size_t errBufLen);

> This seems to be missing ta change to libvirt_private.sym to actually
> export the new function to individual drivers.

Good catch.
I didn't notice because currently it isn't needed.

I've fixed that and addressed all of your other comments.
Here's an incremental diff that also includes additional changes, e.g.,
  - enable the syntax-check for strerror
  - change more "out of error" reports to use virReportOOMError
  - use QEMUD_ERROR consistently

After that, I've included the full, revised sequence of changes.

Also, not apparent in this incremental, I moved some changes between
change sets and split some, so now there are 10 change sets.  I confirmed
that things build after each, just in case via this:

b=034-remove-strerror
git checkout $b
git checkout -b tmp $b

for rev in $(git rev-list HEAD ^master|tac); do
  git reset --hard $rev
  git log -1
  make syntax-check > makerr.sc 2>&1 || break
  make check > makerr.c 2>&1 || break
done


diff --git a/Makefile.nonreentrant b/Makefile.nonreentrant
index 13fa59d..b567f31 100644
--- a/Makefile.nonreentrant
+++ b/Makefile.nonreentrant
@@ -79,7 +79,7 @@ NON_REENTRANT += setstate
 NON_REENTRANT += sgetspent
 NON_REENTRANT += srand48
 NON_REENTRANT += srandom
-# NON_REENTRANT += strerror
+NON_REENTRANT += strerror
 NON_REENTRANT += strtok
 NON_REENTRANT += tmpnam
 NON_REENTRANT += ttyname
diff --git a/qemud/Makefile.am b/qemud/Makefile.am
index 372b931..a0c161a 100644
--- a/qemud/Makefile.am
+++ b/qemud/Makefile.am
@@ -107,7 +107,6 @@ libvirtd_LDADD =					\
 if ! WITH_DRIVER_MODULES
 if WITH_QEMU
 libvirtd_LDADD += ../src/libvirt_driver_qemu.la
-libvirtd_LDADD += ../src/libvirt_util.la
 endif

 if WITH_LXC
diff --git a/src/libvirt_private.syms b/src/libvirt_private.syms
index a6f4f3e..4338da7 100644
--- a/src/libvirt_private.syms
+++ b/src/libvirt_private.syms
@@ -292,6 +292,7 @@ virEnumToString;
 virEventAddHandle;
 virEventRemoveHandle;
 virExec;
+virSetCloseExec;
 virSetNonBlock;
 virFormatMacAddr;
 virGetHostname;
@@ -326,6 +327,7 @@ virErrorMsg;
 virRaiseError;
 virReportSystemErrorFull;
 virReportOOMErrorFull;
+virStrerror;


 # xml.h
diff --git a/src/network_driver.c b/src/network_driver.c
index 8d7340e..4138939 100644
--- a/src/network_driver.c
+++ b/src/network_driver.c
@@ -904,16 +904,17 @@ static int networkStartNetworkDaemon(virConnectPtr conn,
  err_delbr2:
     networkRemoveIptablesRules(driver, network);

- err_delbr1:;
-    char ebuf[1024];
+ err_delbr1:
     if (network->def->ipAddress &&
         (err = brSetInterfaceUp(driver->brctl, network->def->bridge, 0))) {
+        char ebuf[1024];
         networkLog(NETWORK_WARN, _("Failed to bring down bridge '%s' : %s\n"),
                  network->def->bridge, virStrerror(err, ebuf, sizeof ebuf));
     }

  err_delbr:
     if ((err = brDeleteBridge(driver->brctl, network->def->bridge))) {
+        char ebuf[1024];
         networkLog(NETWORK_WARN, _("Failed to delete bridge '%s' : %s\n"),
                  network->def->bridge, virStrerror(err, ebuf, sizeof ebuf));
     }
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index c331087..a322486 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -218,7 +218,7 @@ qemudAutostartConfigs(struct qemud_driver *driver) {
             int ret = qemudStartVMDaemon(conn, driver, vm, NULL, -1);
             if (ret < 0) {
                 virErrorPtr err = virGetLastError();
-                qemudLog(QEMUD_ERR, _("Failed to autostart VM '%s': %s\n"),
+                qemudLog(QEMUD_ERROR, _("Failed to autostart VM '%s': %s\n"),
                          vm->def->name,
                          err ? err->message : NULL);
             } else {
@@ -304,7 +304,7 @@ qemudReconnectVMs(struct qemud_driver *driver)
         if ((config = virDomainConfigFile(NULL,
                                           driver->stateDir,
                                           vm->def->name)) == NULL) {
-            qemudLog(QEMUD_ERR, _("Failed to read domain status for %s\n"),
+            qemudLog(QEMUD_ERROR, _("Failed to read domain status for %s\n"),
                      vm->def->name);
             goto next_error;
         }
@@ -314,13 +314,13 @@ qemudReconnectVMs(struct qemud_driver *driver)
             vm->newDef = vm->def;
             vm->def = status->def;
         } else {
-            qemudLog(QEMUD_ERR, _("Failed to parse domain status for %s\n"),
+            qemudLog(QEMUD_ERROR, _("Failed to parse domain status for %s\n"),
                      vm->def->name);
             goto next_error;
         }

         if ((rc = qemudOpenMonitor(NULL, driver, vm, status->monitorpath, 1)) != 0) {
-            qemudLog(QEMUD_ERR, _("Failed to reconnect monitor for %s: %d\n"),
+            qemudLog(QEMUD_ERROR, _("Failed to reconnect monitor for %s: %d\n"),
                      vm->def->name, rc);
             goto next_error;
         }
@@ -419,9 +419,9 @@ qemudStartup(void) {
     }

     if (virFileMakePath(qemu_driver->stateDir) < 0) {
-        virReportSystemError(NULL, errno,
-                             _("Failed to create state dir '%s'"),
-                             qemu_driver->stateDir);
+        char ebuf[1024];
+        qemudLog(QEMUD_ERROR, _("Failed to create state dir '%s': %s\n"),
+                 qemu_driver->stateDir, virStrerror(errno, ebuf, sizeof ebuf));
         goto error;
     }

@@ -844,8 +844,11 @@ static int qemudWaitForMonitor(virConnectPtr conn,
     ret = qemudReadMonitorOutput(conn, vm, logfd, buf, sizeof(buf),
                                  qemudFindCharDevicePTYs,
                                  "console", 3000);
-    if (close(logfd) < 0)
-        virReportSystemError(NULL, errno, "%s", _("Unable to close logfile"));
+    if (close(logfd) < 0) {
+        char ebuf[1024];
+        qemudLog(QEMUD_WARN, _("Unable to close logfile: %s\n"),
+                 virStrerror(errno, ebuf, sizeof ebuf));
+    }

     if (ret == 1) /* Success */
         return 0;
@@ -1097,6 +1100,7 @@ static int qemudStartVMDaemon(virConnectPtr conn,
     const char *emulator;
     pid_t child;
     int pos = -1;
+    char ebuf[1024];

     FD_ZERO(&keepfd);

@@ -1167,30 +1171,30 @@ static int qemudStartVMDaemon(virConnectPtr conn,
     tmp = progenv;
     while (*tmp) {
         if (safewrite(vm->logfile, *tmp, strlen(*tmp)) < 0)
-            virReportSystemError(NULL, errno,
-                                 "%s", _("Unable to write envv to logfile"));
+            qemudLog(QEMUD_WARN, _("Unable to write envv to logfile: %s\n"),
+                     virStrerror(errno, ebuf, sizeof ebuf));
         if (safewrite(vm->logfile, " ", 1) < 0)
-            virReportSystemError(NULL, errno,
-                                 "%s", _("Unable to write envv to logfile"));
+            qemudLog(QEMUD_WARN, _("Unable to write envv to logfile: %s\n"),
+                     virStrerror(errno, ebuf, sizeof ebuf));
         tmp++;
     }
     tmp = argv;
     while (*tmp) {
         if (safewrite(vm->logfile, *tmp, strlen(*tmp)) < 0)
-            virReportSystemError(NULL, errno,
-                                 "%s", _("Unable to write argv to logfile"));
+            qemudLog(QEMUD_WARN, _("Unable to write argv to logfile: %s\n"),
+                     virStrerror(errno, ebuf, sizeof ebuf));
         if (safewrite(vm->logfile, " ", 1) < 0)
-            virReportSystemError(NULL, errno,
-                                 "%s", _("Unable to write argv to logfile"));
+            qemudLog(QEMUD_WARN, _("Unable to write argv to logfile: %s\n"),
+                     virStrerror(errno, ebuf, sizeof ebuf));
         tmp++;
     }
     if (safewrite(vm->logfile, "\n", 1) < 0)
-        virReportSystemError(NULL, errno,
-                             "%s", _("Unable to write argv to logfile"));
+        qemudLog(QEMUD_WARN, _("Unable to write argv to logfile: %s\n"),
+                 virStrerror(errno, ebuf, sizeof ebuf));

     if ((pos = lseek(vm->logfile, 0, SEEK_END)) < 0)
-        virReportSystemError(NULL, errno,
-                             "%s", _("Unable to seek to end of logfile"));
+        qemudLog(QEMUD_WARN, _("Unable to seek to end of logfile: %s\n"),
+                 virStrerror(errno, ebuf, sizeof ebuf));

     for (i = 0 ; i < ntapfds ; i++)
         FD_SET(tapfds[i], &keepfd);
@@ -1277,8 +1281,11 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
         vm->monitor_watch = -1;
     }

-    if (close(vm->logfile) < 0)
-        virReportSystemError(conn, errno, "%s", _("Unable to close logfile"));
+    if (close(vm->logfile) < 0) {
+        char ebuf[1024];
+        qemudLog(QEMUD_WARN, _("Unable to close logfile: %s\n"),
+                 virStrerror(errno, ebuf, sizeof ebuf));
+    }
     if (vm->monitor != -1)
         close(vm->monitor);
     vm->logfile = -1;
@@ -1444,9 +1451,11 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
     }

     /* Log, but ignore failures to write logfile for VM */
-    if (safewrite(vm->logfile, buf, strlen(buf)) < 0)
-        virReportSystemError(NULL, errno,
-                             "%s", _("Unable to log VM console data"));
+    if (safewrite(vm->logfile, buf, strlen(buf)) < 0) {
+        char ebuf[1024];
+        qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s\n"),
+                 virStrerror(errno, ebuf, sizeof ebuf));
+    }

     *reply = buf;
     return 0;
@@ -1454,9 +1463,11 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
  error:
     if (buf) {
         /* Log, but ignore failures to write logfile for VM */
-        if (safewrite(vm->logfile, buf, strlen(buf)) < 0)
-            virReportSystemError(NULL, errno,
-                                 "%s", _("Unable to log VM console data"));
+        if (safewrite(vm->logfile, buf, strlen(buf)) < 0) {
+            char ebuf[1024];
+            qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s\n"),
+                     virStrerror(errno, ebuf, sizeof ebuf));
+        }
         VIR_FREE(buf);
     }
     return -1;
@@ -1562,7 +1573,7 @@ static int kvmGetMaxVCPUs(void) {
     fd = open(KVM_DEVICE, O_RDONLY);
     if (fd < 0) {
         virReportSystemError(NULL, errno, _("Unable to open %s"), KVM_DEVICE);
-        return maxvcpus;
+        return -1;
     }

     r = ioctl(fd, KVM_CHECK_EXTENSION, KVM_CAP_NR_VCPUS);
@@ -2407,15 +2418,13 @@ static int qemudDomainSave(virDomainPtr dom,
     /* Migrate to file */
     safe_path = qemudEscapeShellArg(path);
     if (!safe_path) {
-        qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
-                         "%s", _("out of memory"));
+        virReportOOMError(dom->conn);
         goto cleanup;
     }
     if (virAsprintf(&command, "migrate \"exec:"
                   "dd of='%s' oflag=append conv=notrunc 2>/dev/null"
                   "\"", safe_path) == -1) {
-        qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
-                         "%s", _("out of memory"));
+        virReportOOMError(dom->conn);
         command = NULL;
         goto cleanup;
     }
@@ -2729,8 +2738,7 @@ static int qemudDomainRestore(virConnectPtr conn,
     }

     if (VIR_ALLOC_N(xml, header.xml_len) < 0) {
-        qemudReportError(conn, NULL, NULL, VIR_ERR_OPERATION_FAILED,
-                         "%s", _("out of memory"));
+        virReportOOMError(conn);
         goto cleanup;
     }

@@ -3208,8 +3216,7 @@ static int qemudDomainAttachPciDiskDevice(virConnectPtr conn,

     safe_path = qemudEscapeMonitorArg(dev->data.disk->src);
     if (!safe_path) {
-        qemudReportError(conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
-                         "%s", _("out of memory"));
+        virReportOOMError(conn);
         return -1;
     }

@@ -3278,8 +3285,7 @@ static int qemudDomainAttachUsbMassstorageDevice(virConnectPtr conn,

     safe_path = qemudEscapeMonitorArg(dev->data.disk->src);
     if (!safe_path) {
-        qemudReportError(conn, dom, NULL, VIR_ERR_OPERATION_FAILED,
-                         "%s", _("out of memory"));
+        virReportOOMError(conn);
         return -1;
     }

diff --git a/src/storage_driver.c b/src/storage_driver.c
index d644b63..f1320c5 100644
--- a/src/storage_driver.c
+++ b/src/storage_driver.c
@@ -567,10 +567,11 @@ storagePoolUndefine(virStoragePoolPtr obj) {
     if (virStoragePoolObjDeleteDef(obj->conn, pool) < 0)
         goto cleanup;

-    char ebuf[1024];
-    if (unlink(pool->autostartLink) < 0 && errno != ENOENT && errno != ENOTDIR)
+    if (unlink(pool->autostartLink) < 0 && errno != ENOENT && errno != ENOTDIR) {
+        char ebuf[1024];
         storageLog("Failed to delete autostart link '%s': %s",
                    pool->autostartLink, virStrerror(errno, ebuf, sizeof ebuf));
+    }

     VIR_FREE(pool->configFile);
     VIR_FREE(pool->autostartLink);
diff --git a/src/uml_driver.c b/src/uml_driver.c
index 48e2d07..c5a06a2 100644
--- a/src/uml_driver.c
+++ b/src/uml_driver.c
@@ -727,6 +727,7 @@ static int umlStartVMDaemon(virConnectPtr conn,
     int *tapfds = NULL;
     int ntapfds = 0;
     fd_set keepfd;
+    char ebuf[1024];

     FD_ZERO(&keepfd);

@@ -789,7 +790,6 @@ static int umlStartVMDaemon(virConnectPtr conn,
         return -1;
     }

-    char ebuf[1024];
     tmp = progenv;
     while (*tmp) {
         if (safewrite(logfd, *tmp, strlen(*tmp)) < 0)
diff --git a/src/util.c b/src/util.c
index 1034455..01fe37a 100644
--- a/src/util.c
+++ b/src/util.c
@@ -182,6 +182,9 @@ int virSetNonBlock(int fd) {
     return 0;
 }

+
+#ifndef WIN32
+
 int virSetCloseExec(int fd) {
     int flags;
     if ((flags = fcntl(fd, F_GETFD)) < 0)
@@ -192,8 +195,6 @@ int virSetCloseExec(int fd) {
     return 0;
 }

-#ifndef WIN32
-
 static int
 __virExec(virConnectPtr conn,
           const char *const*argv,
diff --git a/src/uuid.c b/src/uuid.c
index 9e9416f..6f7d85f 100644
--- a/src/uuid.c
+++ b/src/uuid.c
@@ -100,12 +100,13 @@ virUUIDGenerate(unsigned char *uuid)
     if (uuid == NULL)
         return(-1);

-    char ebuf[1024];
-    if ((err = virUUIDGenerateRandomBytes(uuid, VIR_UUID_BUFLEN)))
+    if ((err = virUUIDGenerateRandomBytes(uuid, VIR_UUID_BUFLEN))) {
+        char ebuf[1024];
         qemudLog(QEMUD_WARN,
                  _("Falling back to pseudorandom UUID,"
                    " failed to generate random bytes: %s"),
                  virStrerror(err, ebuf, sizeof ebuf));
+    }

     return virUUIDGeneratePseudoRandomBytes(uuid, VIR_UUID_BUFLEN);
 }


Here's the 10-change-set sequence:

-------------- next part --------------
A non-text attachment was scrubbed...
Name: k
Type: text/x-patch
Size: 13501 bytes
Desc: not available
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20090204/0063f34b/attachment-0001.bin>


More information about the libvir-list mailing list