summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorRichard Jones <rjones@centos5x32.home.annexia.org>2009-07-29 15:02:16 +0100
committerRichard Jones <rjones@trick.home.annexia.org>2009-07-29 15:03:59 +0100
commit25c4b0190c22e3bdc5594aff994c8e8f99db5ab3 (patch)
tree9f01452f2889403bb0a308481a39b2858f97c8a1
parent2d5b0e7599b456d6817b0f225f5ed4ce4795d043 (diff)
downloadlibguestfs-25c4b0190c22e3bdc5594aff994c8e8f99db5ab3.tar.gz
libguestfs-25c4b0190c22e3bdc5594aff994c8e8f99db5ab3.tar.xz
libguestfs-25c4b0190c22e3bdc5594aff994c8e8f99db5ab3.zip
Don't show empty CD devices (RHBZ#514505).
-rw-r--r--daemon/devsparts.c27
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';