From: Daniel Veillard Date: Tue, 21 Oct 2008 13:09:23 +0000 (+0000) Subject: * src/qemu_driver.c: cleanup patch for usb masstorage hotadd X-Git-Tag: LIBVIRT_0_5_0~120 X-Git-Url: http://git.ipfire.org/cgi-bin/gitweb.cgi?a=commitdiff_plain;h=6d6fd6b3055a9c77c690b1322ed3aac9ac3d4f4f;p=thirdparty%2Flibvirt.git * src/qemu_driver.c: cleanup patch for usb masstorage hotadd by Guido Günther daniel --- diff --git a/ChangeLog b/ChangeLog index ace8a8e5b3..47a7f8f156 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,3 +1,8 @@ +Tue Oct 21 15:08:02 CEST 2008 Daniel Veillard + + * src/qemu_driver.c: cleanup patch for usb masstorage hotadd + by Guido Günther + Mon Oct 20 09:45:42 CEST Jim Meyering ALL_LINGUAS: set unconditionally, using $srcdir/po diff --git a/src/qemu_driver.c b/src/qemu_driver.c index 904fe0068a..59d7166a61 100644 --- a/src/qemu_driver.c +++ b/src/qemu_driver.c @@ -2583,7 +2583,8 @@ static int qemudDomainAttachUsbMassstorageDevice(virDomainPtr dom, virDomainDevi { struct qemud_driver *driver = (struct qemud_driver *)dom->conn->privateData; virDomainObjPtr vm = virDomainFindByUUID(&driver->domains, dom->uuid); - int ret; + int ret, i; + char *safe_path; char *cmd, *reply; if (!vm) { @@ -2592,12 +2593,28 @@ static int qemudDomainAttachUsbMassstorageDevice(virDomainPtr dom, virDomainDevi return -1; } + for (i = 0 ; i < vm->def->ndisks ; i++) { + if (STREQ(vm->def->disks[i]->dst, dev->data.disk->dst)) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + _("target %s already exists"), dev->data.disk->dst); + return -1; + } + } + if (VIR_REALLOC_N(vm->def->disks, vm->def->ndisks+1) < 0) { qemudReportError(dom->conn, NULL, NULL, VIR_ERR_NO_MEMORY, NULL); return -1; } - ret = asprintf(&cmd, "usb_add disk:%s", dev->data.disk->src); + safe_path = qemudEscapeMonitorArg(dev->data.disk->src); + if (!safe_path) { + qemudReportError(dom->conn, dom, NULL, VIR_ERR_OPERATION_FAILED, + "%s", _("out of memory")); + return -1; + } + + ret = asprintf(&cmd, "usb_add disk:%s", safe_path); + VIR_FREE(safe_path); if (ret == -1) { qemudReportError(dom->conn, NULL, NULL, VIR_ERR_NO_MEMORY, NULL); return ret;