[libvirt] [PATCH 3/5] Move qemuProcessLogReadFD and qemuProcessLogFD methods
Eric Blake
eblake at redhat.com
Thu May 5 20:58:38 UTC 2011
On 05/05/2011 05:51 AM, Daniel P. Berrange wrote:
> Move the qemuProcessLogReadFD and qemuProcessLogFD methods
> into qemu_domain.c, renaming them to qemuDomainCreateLog
> and qemuDomainOpenLog.
>
> * src/qemu/qemu_domain.c, src/qemu/qemu_domain.h: Add
> qemuDomainCreateLog and qemuDomainOpenLog.
> * src/qemu/qemu_process.c: Remove qemuProcessLogFD
> and qemuProcessLogReadFD
> +static int
> +qemuDomainOpenLogHelper(struct qemud_driver *driver,
> + virDomainObjPtr vm,
> + int flags,
> + mode_t mode)
> +{
> + char *logfile;
> + int fd = -1;
> +
> + if (virAsprintf(&logfile, "%s/%s.log", driver->logDir, vm->def->name) < 0) {
> + virReportOOMError();
> + return -1;
> + }
> +
> + if ((fd = open(logfile, flags, mode)) < 0) {
> + virReportSystemError(errno, _("failed to create logfile %s"),
> + logfile);
> + goto cleanup;
> + }
> + if (virSetCloseExec(fd) < 0) {
I still need to implement O_CLOEXEC in gnulib. Someday...
> + virReportSystemError(errno, _("failed to set close-on-exec flag on %s"),
> + logfile);
> + VIR_FORCE_CLOSE(fd);
> + goto cleanup;
> + }
> +
> +cleanup:
> + VIR_FREE(logfile);
> + return fd;
> +
Not quite straight code motion - you rewrote the error handling to be
saner. But I like it (it's a small enough code motion to be reviewable,
not like some of those thousand-liners in the past).
}
> +
> +
> +int
> +qemuDomainCreateLog(struct qemud_driver *driver, virDomainObjPtr vm, bool append)
> +{
> + int flags;
> +
> + flags = O_CREAT | O_WRONLY;
> + /* Only logrotate files in /var/log, so only append if running privileged */
> + if (driver->privileged || append)
> + flags |= O_APPEND;
> + else
> + flags |= O_TRUNC;
> +
> + return qemuDomainOpenLogHelper(driver, vm, flags, S_IRUSR | S_IWUSR);
> +}
> +
> +
> +int
> +qemuDomainOpenLog(struct qemud_driver *driver, virDomainObjPtr vm, off_t pos)
> +{
> + int fd;
> + off_t off;
> + int whence;
> +
> + if ((fd = qemuDomainOpenLogHelper(driver, vm, O_RDONLY, 0)) < 0)
> + return -1;
> +
> + if (pos < 0) {
> + off = 0;
> + whence = SEEK_END;
> + } else {
> + off = pos;
> + whence = SEEK_SET;
> + }
> +
> + if (lseek(fd, off, whence) < 0) {
> + virReportSystemError(pos < 0 ? 0 : errno,
> + _("Unable to seek to %lld from %s in log for %s"),
> + (long long)off,
> + whence == SEEK_END ? "end" : "start",
_("end"), _("start")
otherwise the translation looks funny for injecting an English word into
a foreign sentence
In fact, translators would probably prefer that you had two strings:
whence == SEEK_END ?
_("unable to seek to end of log for %$2s") :
_("unable to seek to %lld from start for %s"),
(long long) off, vm->def->name
--
Eric Blake eblake at redhat.com +1-801-349-2682
Libvirt virtualization library http://libvirt.org
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 619 bytes
Desc: OpenPGP digital signature
URL: <http://listman.redhat.com/archives/libvir-list/attachments/20110505/ec835226/attachment-0001.sig>
More information about the libvir-list
mailing list