diff options
author | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2011-02-17 19:49:00 +0000 |
---|---|---|
committer | Stefano Stabellini <stefano.stabellini@eu.citrix.com> | 2011-02-17 19:49:00 +0000 |
commit | 1c0d8c69eca0735148504cd7085dda1203e5029e (patch) | |
tree | 7b96d2baa8b06fc782a167770f5b14de86ff9daf | |
parent | 72d528b0571855f47d0c93fae2b55cd2b8967659 (diff) | |
download | xen-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.c | 37 |
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) |