diff options
author | Richard Jones <rjones@centos5x32.home.annexia.org> | 2009-07-29 15:02:16 +0100 |
---|---|---|
committer | Richard Jones <rjones@trick.home.annexia.org> | 2009-07-29 15:03:59 +0100 |
commit | 25c4b0190c22e3bdc5594aff994c8e8f99db5ab3 (patch) | |
tree | 9f01452f2889403bb0a308481a39b2858f97c8a1 | |
parent | 2d5b0e7599b456d6817b0f225f5ed4ce4795d043 (diff) | |
download | libguestfs-25c4b0190c22e3bdc5594aff994c8e8f99db5ab3.tar.gz libguestfs-25c4b0190c22e3bdc5594aff994c8e8f99db5ab3.tar.xz libguestfs-25c4b0190c22e3bdc5594aff994c8e8f99db5ab3.zip |
Don't show empty CD devices (RHBZ#514505).
-rw-r--r-- | daemon/devsparts.c | 27 |
1 files changed, 27 insertions, 0 deletions
diff --git a/daemon/devsparts.c b/daemon/devsparts.c index 32d2fa82..a198ccd9 100644 --- a/daemon/devsparts.c +++ b/daemon/devsparts.c @@ -37,6 +37,7 @@ do_list_devices (void) DIR *dir; struct dirent *d; char buf[256]; + int fd; dir = opendir ("/sys/block"); if (!dir) { @@ -49,6 +50,18 @@ do_list_devices (void) strncmp (d->d_name, "hd", 2) == 0 || strncmp (d->d_name, "vd", 2) == 0) { snprintf (buf, sizeof buf, "/dev/%s", d->d_name); + + /* RHBZ#514505: Some versions of qemu <= 0.10 device to add a + * CD-ROM device even though we didn't request it. Try to + * detect this by seeing if the device contains media. + */ + fd = open (buf, O_RDONLY); + if (fd == -1) { + perror (buf); + continue; + } + close (fd); + if (add_string (&r, &size, &alloc, buf) == -1) { closedir (dir); return NULL; @@ -79,6 +92,7 @@ do_list_partitions (void) DIR *dir, *dir2; struct dirent *d; char buf[256], devname[256]; + int fd; dir = opendir ("/sys/block"); if (!dir) { @@ -90,6 +104,19 @@ do_list_partitions (void) if (strncmp (d->d_name, "sd", 2) == 0 || strncmp (d->d_name, "hd", 2) == 0 || strncmp (d->d_name, "vd", 2) == 0) { + snprintf (buf, sizeof buf, "/dev/%s", d->d_name); + + /* RHBZ#514505: Some versions of qemu <= 0.10 device to add a + * CD-ROM device even though we didn't request it. Try to + * detect this by seeing if the device contains media. + */ + fd = open (buf, O_RDONLY); + if (fd == -1) { + perror (buf); + continue; + } + close (fd); + strncpy (devname, d->d_name, sizeof devname); devname[sizeof devname - 1] = '\0'; |