From: KAMEZAWA Hiroyuki Date: Thu, 28 Oct 2010 08:51:18 +0000 (+0900) Subject: qemu: check compression program availability of virsh save and dump X-Git-Tag: v0.8.6~195 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=f69ce3feb0eaa170420b5287f3512c18af29c630;p=thirdparty%2Flibvirt.git qemu: check compression program availability of virsh save and dump --- diff --git a/src/qemu/qemu_driver.c b/src/qemu/qemu_driver.c index 8aa593175e..a7cce6ae41 100644 --- a/src/qemu/qemu_driver.c +++ b/src/qemu/qemu_driver.c @@ -5742,6 +5742,22 @@ cleanup: return ret; } +/* Returns true if a compression program is available in PATH */ +static bool qemudCompressProgramAvailable(enum qemud_save_formats compress) +{ + const char *prog; + char *c; + + if (compress == QEMUD_SAVE_FORMAT_RAW) + return true; + prog = qemudSaveCompressionTypeToString(compress); + c = virFindFileInPath(prog); + if (!c) + return false; + VIR_FREE(c); + return true; +} + static int qemudDomainSave(virDomainPtr dom, const char *path) { struct qemud_driver *driver = dom->conn->privateData; @@ -5761,6 +5777,12 @@ static int qemudDomainSave(virDomainPtr dom, const char *path) "in configuration file")); return -1; } + if (!qemudCompressProgramAvailable(compressed)) { + qemuReportError(VIR_ERR_OPERATION_FAILED, + "%s", _("Compression program for image format " + "in configuration file isn't available")); + return -1; + } } vm = virDomainFindByUUID(&driver->domains, dom->uuid); @@ -5924,6 +5946,12 @@ static int qemudDomainCoreDump(virDomainPtr dom, "configuration file")); return -1; } + if (!qemudCompressProgramAvailable(compress)) { + qemuReportError(VIR_ERR_OPERATION_FAILED, + "%s", _("Compression program for dump image format " + "in configuration file isn't available")); + return -1; + } } qemuDriverLock(driver);