aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorStefano Stabellini <stefano.stabellini@eu.citrix.com>2011-02-17 19:49:00 +0000
committerStefano Stabellini <stefano.stabellini@eu.citrix.com>2011-02-17 19:49:00 +0000
commit1c0d8c69eca0735148504cd7085dda1203e5029e (patch)
tree7b96d2baa8b06fc782a167770f5b14de86ff9daf
parent72d528b0571855f47d0c93fae2b55cd2b8967659 (diff)
downloadxen-1c0d8c69eca0735148504cd7085dda1203e5029e.tar.gz
xen-1c0d8c69eca0735148504cd7085dda1203e5029e.tar.bz2
xen-1c0d8c69eca0735148504cd7085dda1203e5029e.zip
xl: fix cdrom_insert parsing
Reuse the same code used to parse the disk line from the VM config file in cd_insert. Signed-off-by: Stefano Stabellini <stefano.stabellini@eu.citrix.com> Acked-by: Ian Jackson <ian.jackson@eu.citrix.com> Committed-by: Ian Jackson <ian.jackson@eu.citrix.com>
-rw-r--r--tools/libxl/xl_cmdimpl.c37
1 files changed, 10 insertions, 27 deletions
diff --git a/tools/libxl/xl_cmdimpl.c b/tools/libxl/xl_cmdimpl.c
index c1ff5a2e88..3bbd239382 100644
--- a/tools/libxl/xl_cmdimpl.c
+++ b/tools/libxl/xl_cmdimpl.c
@@ -1849,40 +1849,23 @@ int main_memset(int argc, char **argv)
static void cd_insert(const char *dom, const char *virtdev, char *phys)
{
libxl_device_disk disk; /* we don't free disk's contents */
- char *p;
+ char *buf = NULL;
find_domain(dom);
+ if (asprintf(&buf, "%s,%s:cdrom,r", phys ? phys : "", virtdev) < 0) {
+ fprintf(stderr, "out of memory\n");
+ return;
+ }
+ if (!parse_disk_config(&disk, buf)) {
+ fprintf(stderr, "format error\n");
+ return;
+ }
disk.backend_domid = 0;
disk.domid = domid;
- if (phys) {
- p = strchr(phys, ':');
- if (!p) {
- fprintf(stderr, "No type specified, ");
- disk.pdev_path = phys;
- if (!strncmp(phys, "/dev", 4)) {
- fprintf(stderr, "assuming phy:\n");
- disk.backend = DISK_BACKEND_PHY;
- } else {
- fprintf(stderr, "assuming file:\n");
- disk.backend = DISK_BACKEND_TAP;
- }
- } else {
- *p = '\0';
- p++;
- disk.pdev_path = p;
- libxl_string_to_backend(&ctx, phys, &disk.backend);
- }
- } else {
- disk.pdev_path = strdup("");
- disk.format = DISK_FORMAT_EMPTY;
- }
- disk.vdev = (char*)virtdev;
- disk.unpluggable = 1;
- disk.readwrite = 0;
- disk.is_cdrom = 1;
libxl_cdrom_insert(&ctx, domid, &disk);
+ free(buf);
}
int main_cd_eject(int argc, char **argv)