chiark / gitweb /
rules_generator: remove "installation" function
[elogind.git] / extras / cdrom_id / cdrom_id.c
index 7d97d0b07bd007040028c6f7af26cb9e37f7472a..0d4a8c10f02fa0fb2a08bc1b1776110278745fdc 100644 (file)
@@ -7,9 +7,6 @@
  *     under the terms of the GNU General Public License as published by the
  *     Free Software Foundation version 2 of the License.
  *
- * Framework based on ata_id which is:
- *     Copyright (C) 2005 Kay Sievers <kay.sievers@vrfy.org>
- *
  */
 
 #ifndef _GNU_SOURCE
 #include <unistd.h>
 #include <fcntl.h>
 #include <ctype.h>
+#include <string.h>
 #include <errno.h>
 #include <sys/ioctl.h>
 #include <sys/types.h>
 #include <sys/stat.h>
 #include <linux/types.h>
-#include <linux/cdrom.h>
 
-#include "../../logging.h"
-#include "../../udev_utils.h"
+#include "../../udev.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,51 +104,46 @@ 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);
+       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;
        }
 
-       printf("ID_CDC=true\n");
+       printf("ID_CDROM=1\n");
 
        if (result & CDC_CD_R)
-               printf("ID_CDC_CD_R=true\n");
+               printf("ID_CDROM_CD_R=1\n");
        if (result & CDC_CD_RW)
-               printf("ID_CDC_CD_RW=true\n");
+               printf("ID_CDROM_CD_RW=1\n");
 
        if (result & CDC_DVD)
-               printf("ID_CDC_DVD=true\n");
+               printf("ID_CDROM_DVD=1\n");
        if (result & CDC_DVD_R)
-               printf("ID_CDC_DVD_R=true\n");
+               printf("ID_CDROM_DVD_R=1\n");
        if (result & CDC_DVD_RAM)
-               printf("ID_CDC_DVD_RAM=true\n");
+               printf("ID_CDROM_DVD_RAM=1\n");
 
        if (result & CDC_MRW)
-               printf("ID_CDC_MRW=true\n");
+               printf("ID_CDROM_MRW=1\n");
        if (result & CDC_MRW_W)
-               printf("ID_CDC_MRW_W=true\n");
-       
-       if (result & CDC_RAM)
-               printf("ID_CDC_RAM=true\n");
-       goto close;
+               printf("ID_CDROM_MRW_W=1\n");
 
+       if (result & CDC_RAM)
+               printf("ID_CDROM_RAM=1\n");
 close:
        close(fd);
 exit: