chiark / gitweb /
EXTRAS/Makefile: fix install targets to match main Makefile
[elogind.git] / extras / cdrom_id / cdrom_id.c
index 556499b8118188887ade898e622332b521a224af..091bf91559102a732dd65603bbffac97c1cb3604 100644 (file)
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <linux/types.h>
-#include <linux/cdrom.h>
 
 #include "../../logging.h"
 #include "../../udev_utils.h"
 
+/*
+ * Taken from the cdrom.h kernel include file.
+ * Included here as some distros don't have an updated version
+ * with all of the DVD flags.  So we just include our own, aren't
+ * we so nice...
+ */
+#define CDROM_GET_CAPABILITY   0x5331  /* get capabilities */
+
+/* capability flags used with the uniform CD-ROM driver */
+#define CDC_CLOSE_TRAY         0x1     /* caddy systems _can't_ close */
+#define CDC_OPEN_TRAY          0x2     /* but _can_ eject.  */
+#define CDC_LOCK               0x4     /* disable manual eject */
+#define CDC_SELECT_SPEED       0x8     /* programmable speed */
+#define CDC_SELECT_DISC                0x10    /* select disc from juke-box */
+#define CDC_MULTI_SESSION      0x20    /* read sessions>1 */
+#define CDC_MCN                        0x40    /* Medium Catalog Number */
+#define CDC_MEDIA_CHANGED      0x80    /* media changed */
+#define CDC_PLAY_AUDIO         0x100   /* audio functions */
+#define CDC_RESET              0x200   /* hard reset device */
+#define CDC_IOCTLS             0x400   /* driver has non-standard ioctls */
+#define CDC_DRIVE_STATUS       0x800   /* driver implements drive status */
+#define CDC_GENERIC_PACKET     0x1000  /* driver implements generic packets */
+#define CDC_CD_R               0x2000  /* drive is a CD-R */
+#define CDC_CD_RW              0x4000  /* drive is a CD-RW */
+#define CDC_DVD                        0x8000  /* drive is a DVD */
+#define CDC_DVD_R              0x10000 /* drive can write DVD-R */
+#define CDC_DVD_RAM            0x20000 /* drive can write DVD-RAM */
+#define CDC_MO_DRIVE           0x40000 /* drive is an MO device */
+#define CDC_MRW                        0x80000 /* drive can read MRW */
+#define CDC_MRW_W              0x100000 /* drive can write MRW */
+#define CDC_RAM                        0x200000 /* ok to open for WRITE */
+
 #ifdef USE_LOG
 void log_message(int priority, const char *format, ...)
 {
@@ -76,24 +107,21 @@ int main(int argc, char *argv[])
                        node = arg;
        }
        if (!node) {
-               err("no node specified");
+               info("no node specified");
                rc = 1;
                goto exit;
        }
 
-       fd = open(node, O_RDONLY);
-       if (fd < 0)
-               if (errno == ENOMEDIUM)
-                       fd = open(node, O_RDONLY|O_NONBLOCK);
+       fd = open(node, O_RDONLY|O_NONBLOCK);
        if (fd < 0) {
-               err("unable to open '%s'", node);
+               info("unable to open '%s'", node);
                rc = 1;
                goto exit;
        }
 
        result = ioctl(fd, CDROM_GET_CAPABILITY, NULL);
        if (result < 0) {
-               err("CDROM_GET_CABILITY failed for '%s'", node);
+               info("CDROM_GET_CAPABILITY failed for '%s'", node);
                rc = 3;
                goto close;
        }
@@ -119,8 +147,6 @@ int main(int argc, char *argv[])
 
        if (result & CDC_RAM)
                printf("ID_CDROM_RAM=1\n");
-       goto close;
-
 close:
        close(fd);
 exit: