X-Git-Url: https://www.chiark.greenend.org.uk/ucgi/~ianmdlvl/git?a=blobdiff_plain;f=extras%2Fcdrom_id%2Fcdrom_id.c;h=0d4a8c10f02fa0fb2a08bc1b1776110278745fdc;hb=9b23e594bf2533b7fadeea1680b186e4775cfe17;hp=f0acedd1ccdff2e2f9f4995b4defb1d571193296;hpb=8ee99e32799956f23bfd898c48b1276ed47d5c1d;p=elogind.git diff --git a/extras/cdrom_id/cdrom_id.c b/extras/cdrom_id/cdrom_id.c index f0acedd1c..0d4a8c10f 100644 --- a/extras/cdrom_id/cdrom_id.c +++ b/extras/cdrom_id/cdrom_id.c @@ -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 - * */ #ifndef _GNU_SOURCE @@ -21,15 +18,46 @@ #include #include #include +#include #include #include #include #include #include -#include -#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,24 +104,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); + 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; } @@ -116,11 +141,9 @@ int main(int argc, char *argv[]) printf("ID_CDROM_MRW=1\n"); if (result & CDC_MRW_W) printf("ID_CDROM_MRW_W=1\n"); - + if (result & CDC_RAM) printf("ID_CDROM_RAM=1\n"); - goto close; - close: close(fd); exit: