]> xenbits.xensource.com Git - people/vhanquez/xen.git/commitdiff
If the 'cdrom=' option is specified in the definition file but media is
authorkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Mon, 10 Apr 2006 16:17:07 +0000 (17:17 +0100)
committerkaf24@firebug.cl.cam.ac.uk <kaf24@firebug.cl.cam.ac.uk>
Mon, 10 Apr 2006 16:17:07 +0000 (17:17 +0100)
not found in the CD drive then main() in vl.c exits and the guest appears
to hang.  This patch modifies vl.c slightly to check for the presents of
media.  If the cdrom cannot be opened then the cd entry is removed from
hd_filename[] and bs_table[] allowing the guest to continue initializing.
If the guest requires the CD media then the guest should report, gracefully
or otherwise, that it's missing.

From: Ross Maxfield <rmaxfiel@novell.com>

Signed-off-by: Keir Fraser <keir@xensource.com>
tools/ioemu/vl.c

index 6586f77deb9019bd6d2ba53c48038dfab787c6d0..1f9de1e78dea6aca037e28c88354c9dae7d8dfba 100644 (file)
@@ -3243,8 +3243,17 @@ int main(int argc, char **argv)
     /* we always create the cdrom drive, even if no disk is there */
     bdrv_init();
     if (has_cdrom) {
-        bs_table[2] = bdrv_new("cdrom");
-        bdrv_set_type_hint(bs_table[2], BDRV_TYPE_CDROM);
+        int fd;
+        if ( (fd = open(hd_filename[2], O_RDONLY | O_BINARY)) < 0) {
+                hd_filename[2]=NULL;
+                bs_table[2]=NULL;
+                fprintf(logfile, "Could not open CD %s.\n", hd_filename[i]);
+        }
+        else {
+                close(fd);
+                bs_table[2] = bdrv_new("cdrom");
+                bdrv_set_type_hint(bs_table[2], BDRV_TYPE_CDROM);
+        }
     }
 
     /* open the virtual block devices */