chiark / gitweb /
cdrom_id: READ TOC before READ DISC INFORMATION fixes qemu
[elogind.git] / extras / ata_id / ata_id.c
index 66b9f42332858d717e30fd3c1baead3f792231d5..bf1debe028e97228e09d4bd5bfdd280bb32099f3 100644 (file)
@@ -38,6 +38,7 @@
 #include <linux/types.h>
 #include <linux/hdreg.h>
 #include <linux/fs.h>
+#include <linux/cdrom.h>
 #include <arpa/inet.h>
 
 #include "libudev.h"
@@ -210,6 +211,16 @@ static int disk_identify (struct udev *udev,
                goto fail;
        }
 
+       /*
+        * do not confuse optical drive firmware with ATA commands
+        * some drives are reported to blank CD-RWs
+        */
+       if (ioctl(fd, CDROM_GET_CAPABILITY, NULL) >= 0) {
+               errno = EIO;
+               ret = -1;
+               goto fail;
+       }
+
        /* So, it's a block device. Let's make sure the ioctls work */
        if ((ret = ioctl(fd, BLKGETSIZE64, &size)) < 0)
                goto fail;
@@ -509,6 +520,8 @@ int main(int argc, char *argv[])
                        wwwn <<= 16;
                        wwwn  |= *((uint16_t *) identify + 111);
                        printf("ID_WWN=0x%llx\n", (unsigned long long int) wwwn);
+                       /* ATA devices have no vendor extension */
+                       printf("ID_WWN_WITH_EXTENSION=0x%llx\n", (unsigned long long int) wwwn);
                }
        } else {
                if (serial[0] != '\0')