Linux-CDROM

 view release on metacpan or  search on metacpan

CDROM.xs  view on Meta::CPAN

void
reset_datasize (...) 
    CODE:
    {
        RESET_DATSIZE;
    }

int
get_datasize (...)
    CODE:
    {
        RETVAL = SvIVX(DATSIZE);
    }
    OUTPUT:
        RETVAL

CDROM*
new (CLASS, device)
        char *CLASS;
        char *device;
    PREINIT:
        CDROM *cdrom;
        int fd;
        int caps;
    CODE:
    {
        reg_error(DEVICE_CDROM_NO_ERROR);
        if ((fd = open(device, O_RDONLY|O_NONBLOCK)) == -1) {
            reg_error(DEVICE_CDROM_NO_OPEN);
            XSRETURN_UNDEF;
        }
        if ((caps = ioctl(fd, CDROM_GET_CAPABILITY)) == -1) {
            reg_error(DEVICE_CDROM_NO_CDROM);
            close(fd);
            XSRETURN_UNDEF;
        } 
            
        New(0, cdrom, 1, CDROM);
        cdrom->fd = fd;
        cdrom->device = savepv(device);
        cdrom->caps = caps;
        cdrom->toch = NULL;
        cdrom->num_frames = -1;
        RETVAL = cdrom;
    }
    OUTPUT:
        RETVAL

void
fh (self)
        CDROM *self;
    PREINIT:
        char mode[8];
        GV *gv;
        STRLEN modlen;
    CODE:
    {
        modlen = sprintf(mode, "<&%i", self->fd);
        gv = newGVgen("main");
        sv_dump((SV*)gv);
        do_openn(gv, mode, modlen, FALSE, O_RDONLY|O_NONBLOCK, 0, Nullfp, (SV**)NULL, 0);
        sv_setsv(ST(0), sv_2mortal(newRV_noinc((SV*)gv)));
        XSRETURN(1);
    }

void
close (self)
        CDROM *self;
    CODE:
    {
        if (close(self->fd) == -1)
            XSRETURN_UNDEF;
        self->fd = -1;
        XSRETURN_YES;
    }
       
void
reopen (self)
        CDROM *self;
    CODE:
    {
        reg_error(DEVICE_CDROM_NO_ERROR);
        if (reopen(self)) 
            XSRETURN_YES;
        reg_error(DEVICE_CDROM_NO_OPEN);
        XSRETURN_UNDEF;
    }

int
capabilities (self)
        CDROM *self;
    CODE:
    {
        if (self->caps == -2) {
            self->caps = ioctl(self->fd, CDROM_GET_CAPABILITY);
            if (self->caps == -1)
                XSRETURN_UNDEF;
        }
        RETVAL = self->caps;
    }
    OUTPUT:
        RETVAL

int
drive_status (self)
        CDROM *self;
    PREINIT:
        int status;
    CODE:
    {
        if ((status = ioctl(self->fd, CDROM_DRIVE_STATUS)) == -1)
            XSRETURN_UNDEF;
        RETVAL = status;
    }
    OUTPUT:
        RETVAL
      
UV
disc_status (self)
        CDROM *self;
    PREINIT:



( run in 1.795 second using v1.01-cache-2.11-cpan-39bf76dae61 )