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; } }
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; } }
/*! Determine if psz_nrg is a Nero CD disk image. @param psz_nrg location of presumed NRG image file. @return true if psz_nrg is a Nero NRG image or false if not a NRG image. */ bool isNero(const char *psz_nrg) { return cdio_is_nrg(psz_nrg); }