Hi,
this just brings qemudDomainAttachUsbMassstorageDevice in line with the
rest of the code:
* don't allow to add the same target device name more than once
* escape paths for qemu's monitor command
Cheers,
-- Guido
>From e8a83a21642c78f22c80750b280c67fb9a7e0c06 Mon Sep 17 00:00:00 2001
From: Guido Guenther <[EMAIL PROTECTED]>
Date: Fri, 17 Oct 2008 12:28:50 +0200
Subject: [PATCH] cleanup usb attach code
* don't allow to add the same target device name more than once
* escape paths for qemu's monitor command
---
src/qemu_driver.c | 21 +++++++++++++++++++--
1 files changed, 19 insertions(+), 2 deletions(-)
diff --git a/src/qemu_driver.c b/src/qemu_driver.c
index af25d07..3df208d 100644
--- a/src/qemu_driver.c
+++ b/src/qemu_driver.c
@@ -2577,7 +2577,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) {
@@ -2586,12 +2587,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;
--
1.6.0.2
--
Libvir-list mailing list
[email protected]
https://www.redhat.com/mailman/listinfo/libvir-list