[libvirt] [PATCH 1/9] eliminate strerror qemu_driver.c: use virReportSystemError instead

Jim Meyering jim at meyering.net
Mon Feb 2 17:08:14 UTC 2009


From: Jim Meyering <meyering at redhat.com>

* src/qemu_driver.c (qemudSetCloseExec): Don't use qemudLog here.
Now, every caller diagnoses the failure.
Simplify, now that there's no logging.
* src/qemu_driver.c (qemudSetNonBlock): Rewrite not to use qemudLog.
---
 src/qemu_driver.c |  126 ++++++++++++++++++++++++-----------------------------
 1 files changed, 57 insertions(+), 69 deletions(-)

diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index 09f69bf..596d940 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -93,31 +93,19 @@ static void qemuDriverUnlock(struct qemud_driver *driver)

 static int qemudSetCloseExec(int fd) {
     int flags;
-    if ((flags = fcntl(fd, F_GETFD)) < 0)
-        goto error;
-    flags |= FD_CLOEXEC;
-    if ((fcntl(fd, F_SETFD, flags)) < 0)
-        goto error;
-    return 0;
- error:
-    qemudLog(QEMUD_ERR,
-             "%s", _("Failed to set close-on-exec file descriptor flag\n"));
-    return -1;
+    return ((flags = fcntl(fd, F_GETFD)) < 0
+             || fcntl(fd, F_SETFD, flags | FD_CLOEXEC) < 0
+            ? -1
+            : 0);
 }


 static int qemudSetNonBlock(int fd) {
     int flags;
-    if ((flags = fcntl(fd, F_GETFL)) < 0)
-        goto error;
-    flags |= O_NONBLOCK;
-    if ((fcntl(fd, F_SETFL, flags)) < 0)
-        goto error;
-    return 0;
- error:
-    qemudLog(QEMUD_ERR,
-             "%s", _("Failed to set non-blocking file descriptor flag\n"));
-    return -1;
+    return ((flags = fcntl(fd, F_GETFL)) < 0
+             || fcntl(fd, F_SETFL, flags | O_NONBLOCK) < 0
+            ? -1
+            : 0);
 }


@@ -207,22 +195,21 @@ qemudLogReadFD(virConnectPtr conn, const char* logDir, const char* name, off_t p


     if ((fd = open(logfile, logmode)) < 0) {
-        qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
-                         _("failed to create logfile %s: %s"),
-                         logfile, strerror(errno));
+        virReportSystemError(conn, errno,
+                             _("failed to create logfile %s"),
+                             logfile);
         return -1;
     }
     if (qemudSetCloseExec(fd) < 0) {
-        qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
-                         _("Unable to set VM logfile close-on-exec flag: %s"),
-                         strerror(errno));
+        virReportSystemError(conn, errno, "%s",
+                             _("Unable to set VM logfile close-on-exec flag"));
         close(fd);
         return -1;
     }
     if (lseek(fd, pos, SEEK_SET) < 0) {
-        qemudReportError(conn, NULL, NULL, VIR_ERR_INTERNAL_ERROR,
-                         _("Unable to seek to %lld in %s: %s"),
-                         (long long) pos, logfile, strerror(errno));
+        virReportSystemError(conn, errno,
+                             _("Unable to seek to %lld in %s"),
+                             (long long) pos, logfile);
         close(fd);
     }
     return fd;
@@ -451,8 +438,9 @@ qemudStartup(void) {
     }

     if (virFileMakePath(qemu_driver->stateDir) < 0) {
-        qemudLog(QEMUD_ERR, _("Failed to create state dir '%s': %s\n"),
-                 qemu_driver->stateDir, strerror(errno));
+        virReportSystemError(NULL, errno,
+                             _("Failed to create state dir '%s'"),
+                             qemu_driver->stateDir);
         goto error;
     }

@@ -877,8 +865,7 @@ static int qemudWaitForMonitor(virConnectPtr conn,
                                  qemudFindCharDevicePTYs,
                                  "console", 3000);
     if (close(logfd) < 0)
-        qemudLog(QEMUD_WARN, _("Unable to close logfile: %s\n"),
-                 strerror(errno));
+        virReportSystemError(NULL, errno, "%s", _("Unable to close logfile"));

     if (ret == 1) /* Success */
         return 0;
@@ -1200,30 +1187,30 @@ static int qemudStartVMDaemon(virConnectPtr conn,
     tmp = progenv;
     while (*tmp) {
         if (safewrite(vm->logfile, *tmp, strlen(*tmp)) < 0)
-            qemudLog(QEMUD_WARN, _("Unable to write envv to logfile %d: %s\n"),
-                     errno, strerror(errno));
+            virReportSystemError(NULL, errno,
+                                 "%s", _("Unable to write envv to logfile"));
         if (safewrite(vm->logfile, " ", 1) < 0)
-            qemudLog(QEMUD_WARN, _("Unable to write envv to logfile %d: %s\n"),
-                     errno, strerror(errno));
+            virReportSystemError(NULL, errno,
+                                 "%s", _("Unable to write envv to logfile"));
         tmp++;
     }
     tmp = argv;
     while (*tmp) {
         if (safewrite(vm->logfile, *tmp, strlen(*tmp)) < 0)
-            qemudLog(QEMUD_WARN, _("Unable to write argv to logfile %d: %s\n"),
-                     errno, strerror(errno));
+            virReportSystemError(NULL, errno,
+                                 "%s", _("Unable to write argv to logfile"));
         if (safewrite(vm->logfile, " ", 1) < 0)
-            qemudLog(QEMUD_WARN, _("Unable to write argv to logfile %d: %s\n"),
-                     errno, strerror(errno));
+            virReportSystemError(NULL, errno,
+                                 "%s", _("Unable to write argv to logfile"));
         tmp++;
     }
     if (safewrite(vm->logfile, "\n", 1) < 0)
-        qemudLog(QEMUD_WARN, _("Unable to write argv to logfile %d: %s\n"),
-                 errno, strerror(errno));
+        virReportSystemError(NULL, errno,
+                             "%s", _("Unable to write argv to logfile"));

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

     for (i = 0 ; i < ntapfds ; i++)
         FD_SET(tapfds[i], &keepfd);
@@ -1292,7 +1279,8 @@ static int qemudStartVMDaemon(virConnectPtr conn,


 static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
-                                  struct qemud_driver *driver, virDomainObjPtr vm) {
+                                  struct qemud_driver *driver,
+                                  virDomainObjPtr vm) {
     if (!virDomainIsActive(vm))
         return;

@@ -1300,8 +1288,9 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,

     if (virKillProcess(vm->pid, 0) == 0 &&
         virKillProcess(vm->pid, SIGTERM) < 0)
-        qemudLog(QEMUD_ERROR, _("Failed to send SIGTERM to %s (%d): %s\n"),
-                 vm->def->name, vm->pid, strerror(errno));
+        virReportSystemError(conn, errno,
+                             _("Failed to send SIGTERM to %s (%d)"),
+                             vm->def->name, vm->pid);

     if (vm->monitor_watch != -1) {
         virEventRemoveHandle(vm->monitor_watch);
@@ -1309,8 +1298,7 @@ static void qemudShutdownVMDaemon(virConnectPtr conn ATTRIBUTE_UNUSED,
     }

     if (close(vm->logfile) < 0)
-        qemudLog(QEMUD_WARN, _("Unable to close logfile %d: %s\n"),
-                 errno, strerror(errno));
+        virReportSystemError(conn, errno, "%s", _("Unable to close logfile"));
     if (vm->monitor != -1)
         close(vm->monitor);
     vm->logfile = -1;
@@ -1477,8 +1465,8 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,

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

     *reply = buf;
     return 0;
@@ -1487,8 +1475,8 @@ qemudMonitorCommandExtra(const virDomainObjPtr vm,
     if (buf) {
         /* Log, but ignore failures to write logfile for VM */
         if (safewrite(vm->logfile, buf, strlen(buf)) < 0)
-            qemudLog(QEMUD_WARN, _("Unable to log VM console data: %s\n"),
-                     strerror(errno));
+            virReportSystemError(NULL, errno,
+                                 "%s", _("Unable to log VM console data"));
         VIR_FREE(buf);
     }
     return -1;
@@ -1593,7 +1581,7 @@ static int kvmGetMaxVCPUs(void) {

     fd = open(KVM_DEVICE, O_RDONLY);
     if (fd < 0) {
-        qemudLog(QEMUD_WARN, _("Unable to open %s: %s\n"), KVM_DEVICE, strerror(errno));
+        virReportSystemError(NULL, errno, _("Unable to open %s"), KVM_DEVICE);
         return maxvcpus;
     }

@@ -1836,8 +1824,8 @@ qemudGetHostname (virConnectPtr conn)

     result = virGetHostname();
     if (result == NULL) {
-        qemudReportError (conn, NULL, NULL, VIR_ERR_SYSTEM_ERROR,
-                          "%s", strerror (errno));
+        virReportSystemError (conn, errno,
+                              "%s", _("failed to determine host name"));
         return NULL;
     }
     /* Caller frees this string. */
@@ -3922,8 +3910,8 @@ qemudDomainBlockPeek (virDomainPtr dom,
         /* The path is correct, now try to open it and get its size. */
         fd = open (path, O_RDONLY);
         if (fd == -1) {
-            qemudReportError (dom->conn, dom, NULL, VIR_ERR_SYSTEM_ERROR,
-                              "%s", strerror (errno));
+            virReportSystemError (dom->conn, errno,
+                                  _("%s: failed to open"), path);
             goto cleanup;
         }

@@ -3933,8 +3921,8 @@ qemudDomainBlockPeek (virDomainPtr dom,
          */
         if (lseek (fd, offset, SEEK_SET) == (off_t) -1 ||
             saferead (fd, buffer, size) == (ssize_t) -1) {
-            qemudReportError (dom->conn, dom, NULL, VIR_ERR_SYSTEM_ERROR,
-                              "%s", strerror (errno));
+            virReportSystemError (dom->conn, errno,
+                                  _("%s: failed to seek or read"), path);
             goto cleanup;
         }

@@ -3988,8 +3976,8 @@ qemudDomainMemoryPeek (virDomainPtr dom,

     /* Create a temporary filename. */
     if ((fd = mkstemp (tmp)) == -1) {
-        qemudReportError (dom->conn, dom, NULL, VIR_ERR_SYSTEM_ERROR,
-                          "%s", strerror (errno));
+        virReportSystemError (dom->conn, errno,
+                              _("mkstemp(\"%s\") failed"), tmp);
         goto cleanup;
     }

@@ -4005,8 +3993,9 @@ qemudDomainMemoryPeek (virDomainPtr dom,

     /* Read the memory file into buffer. */
     if (saferead (fd, buffer, size) == (ssize_t) -1) {
-        qemudReportError (dom->conn, dom, NULL, VIR_ERR_SYSTEM_ERROR,
-                          "%s", strerror (errno));
+        virReportSystemError (dom->conn, errno,
+                              _("failed to read temporary file "
+                                "created with template %s"), tmp);
         goto cleanup;
     }

@@ -4165,8 +4154,8 @@ qemudDomainMigratePrepare2 (virConnectPtr dconn,

         /* Get hostname */
         if (gethostname (hostname, HOST_NAME_MAX+1) == -1) {
-            qemudReportError (dconn, NULL, NULL, VIR_ERR_SYSTEM_ERROR,
-                              "%s", strerror (errno));
+            virReportSystemError (dconn, errno,
+                                  "%s", _("failed to determine host name"));
             goto cleanup;
         }

@@ -4336,8 +4325,7 @@ qemudDomainMigratePerform (virDomainPtr dom,
     /* Issue the migrate command. */
     safe_uri = qemudEscapeMonitorArg (uri);
     if (!safe_uri) {
-        qemudReportError (dom->conn, dom, NULL, VIR_ERR_SYSTEM_ERROR,
-                          "%s", strerror (errno));
+        virReportOOMError (dom->conn);
         goto cleanup;
     }
     snprintf (cmd, sizeof cmd, "migrate \"%s\"", safe_uri);
-- 
1.6.1.2.418.gd79e6




More information about the libvir-list mailing list