* 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, ...)
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: