static int
CDDAReader_init_image(cdio_CDDAReader *self, const char *device)
{
    self->_.image.image = NULL;
    self->_.image.current_sector = 0;
    self->_.image.final_sector = 0;
    self->first_track_num  = CDDAReader_first_track_num_image;
    self->last_track_num = CDDAReader_last_track_num_image;
    self->track_lsn = CDDAReader_track_lsn_image;
    self->track_last_lsn = CDDAReader_track_last_lsn_image;
    self->first_sector = CDDAReader_first_sector_image;
    self->last_sector = CDDAReader_last_sector_image;
    self->read = CDDAReader_read_image;
    self->seek = CDDAReader_seek_image;
    self->set_speed = CDDAReader_set_speed_image;
    self->dealloc = CDDAReader_dealloc_image;

    /*open CD image based on what type it is*/
    if (cdio_is_cuefile(device)) {
        self->_.image.image = cdio_open_cue(device);
    } else if (cdio_is_tocfile(device)) {
        self->_.image.image = cdio_open_bincue(device);
    } else if (cdio_is_tocfile(device)) {
        self->_.image.image = cdio_open_cdrdao(device);
    } else if (cdio_is_nrg(device)) {
        self->_.image.image = cdio_open_nrg(device);
    }
    if (self->_.image.image == NULL) {
        PyErr_SetString(PyExc_IOError, "unable to open CD image");
        return -1;
    }
    self->_.image.final_sector = (lsn_t)self->last_sector(self);
    return 0;
}
static int
CDDAReader_init(cdio_CDDAReader *self, PyObject *args, PyObject *kwds)
{
    char *device = NULL;
    struct stat buf;

    self->is_cd_image = 0;
    self->is_logging = 0;
    self->dealloc = NULL;
    self->closed = 0;
    self->audiotools_pcm = NULL;
    cddareader_reset_log(&(self->log));

    if (!PyArg_ParseTuple(args, "s|i", &device, &(self->is_logging)))
        return -1;

    if ((self->audiotools_pcm = open_audiotools_pcm()) == NULL)
        return -1;

    /*identify whether drive is physical or a CD image*/
    if (stat(device, &buf)) {
        PyErr_SetFromErrno(PyExc_IOError);
        return -1;
    }
    if (S_ISREG(buf.st_mode)) {
        if (cdio_is_cuefile(device) ||
            cdio_is_binfile(device) ||
            cdio_is_tocfile(device) ||
            cdio_is_nrg(device)) {
            /*open CD image and set function pointers*/
            self->is_cd_image = 1;
            self->is_logging = 0;
            return CDDAReader_init_image(self, device);
        } else {
            /*unsupported file*/
            PyErr_SetString(PyExc_ValueError, "unsupported CD image type");
            return -1;
        }
    } else if (S_ISBLK(buf.st_mode)) {
        if (cdio_is_device(device, DRIVER_LINUX)) {
            /*open CD device and set function pointers*/
            self->is_cd_image = 0;
            return CDDAReader_init_device(self, device);
        } else {
            /*unsupported block device*/
            PyErr_SetString(PyExc_ValueError, "unsupported block device");
            return -1;
        }
    } else {
        /*unsupported file type*/
        PyErr_SetString(PyExc_ValueError, "unsupported file type");
        return -1;
    }
}
Example #3
0
static PyObject*
cdio_identify_cdrom(PyObject *dummy, PyObject *args) {
    const char* device;
    struct stat buf;

    if (!PyArg_ParseTuple(args, "s", &device))
        return NULL;

    if (stat(device, &buf)) {
        PyErr_SetFromErrno(PyExc_IOError);
        return NULL;
    }

    if (S_ISREG(buf.st_mode)) {
         if (cdio_is_cuefile(device)) {
             return Py_BuildValue("i", CD_IMAGE | CUE_FILE);
         } else if (cdio_is_binfile(device)) {
             return Py_BuildValue("i", CD_IMAGE | BIN_FILE);
         } else if (cdio_is_tocfile(device)) {
             return Py_BuildValue("i", CD_IMAGE | TOC_FILE);
         } else if (cdio_is_nrg(device)) {
             return Py_BuildValue("i", CD_IMAGE | NRG_FILE);
         } else {
             PyErr_SetString(PyExc_ValueError, "unknown image file");
             return NULL;
         }
    } else if (S_ISBLK(buf.st_mode)) {
        if (cdio_is_device(device, DRIVER_LINUX)) {
            return Py_BuildValue("i", DEVICE_FILE);
        } else {
            PyErr_SetString(PyExc_ValueError, "unknown CD device");
            return NULL;
        }
    } else {
        PyErr_SetString(PyExc_ValueError, "unknown device");
        return NULL;
    }
}
Example #4
0
/*! 
    Determine if cue_name is the cue sheet for a CDRWIN CD disk image.
    
    @return corresponding BIN file if cue_name is a CDRWIN cue file or
    NULL if not a CUE file.
  */
char *
isCueFile(const char *psz_cue_name)
{
  return cdio_is_cuefile(psz_cue_name);
}