]> xenbits.xensource.com Git - libvirt.git/commitdiff
Add a qemuDomainAppendLog method for writing to the domain logfile
authorDaniel P. Berrange <berrange@redhat.com>
Thu, 5 May 2011 11:40:50 +0000 (12:40 +0100)
committerDaniel P. Berrange <berrange@redhat.com>
Fri, 6 May 2011 11:02:02 +0000 (12:02 +0100)
The qemuDomainAppendLog method allows writing a formatted string
to the end of the domain logfile, optionally opening it if needed.

* src/qemu/qemu_domain.c, src/qemu/qemu_domain.h: Add
  qemuDomainAppendLog

src/qemu/qemu_domain.c
src/qemu/qemu_domain.h

index 9373f45fabce41012adb1b123053cf85809aadfb..24eb456635b5a9ab73b97da294c1451dc3b0d5eb 100644 (file)
@@ -891,3 +891,39 @@ qemuDomainOpenLog(struct qemud_driver *driver, virDomainObjPtr vm, off_t pos)
 }
 
 
+int qemuDomainAppendLog(struct qemud_driver *driver,
+                        virDomainObjPtr obj,
+                        int logFD,
+                        const char *fmt, ...)
+{
+    int fd = logFD;
+    va_list argptr;
+    char *message = NULL;
+    int ret = -1;
+
+    va_start(argptr, fmt);
+
+    if ((fd == -1) &&
+        (fd = qemuDomainCreateLog(driver, obj, true)) < 0)
+        goto cleanup;
+
+    if (virVasprintf(&message, fmt, argptr) < 0) {
+        virReportOOMError();
+        goto cleanup;
+    }
+    if (safewrite(fd, message, strlen(message)) < 0) {
+        virReportSystemError(errno, _("Unable to write to domain logfile %s"),
+                             obj->def->name);
+        goto cleanup;
+    }
+
+    ret = 0;
+
+cleanup:
+    va_end(argptr);
+
+    if (fd != logFD)
+        VIR_FORCE_CLOSE(fd);
+
+    return ret;
+}
index dfb25fb31c3938458ffca80ab76ecbcec372cad4..286fdb28141cc187542bb8e63ade4c9279fb93e3 100644 (file)
@@ -131,5 +131,9 @@ void qemuDomainObjCheckNetTaint(struct qemud_driver *driver,
 
 int qemuDomainCreateLog(struct qemud_driver *driver, virDomainObjPtr vm, bool append);
 int qemuDomainOpenLog(struct qemud_driver *driver, virDomainObjPtr vm, off_t pos);
+int qemuDomainAppendLog(struct qemud_driver *driver,
+                        virDomainObjPtr vm,
+                        int logFD,
+                        const char *fmt, ...) ATTRIBUTE_FMT_PRINTF(4, 5);
 
 #endif /* __QEMU_DOMAIN_H__ */