diff --git a/include/cdio/cdio.h b/include/cdio/cdio.h index 697f824b..c99d46df 100644 --- a/include/cdio/cdio.h +++ b/include/cdio/cdio.h @@ -1,5 +1,5 @@ /* -*- c -*- - $Id: cdio.h,v 1.20 2003/09/20 12:34:02 rocky Exp $ + $Id: cdio.h,v 1.21 2003/09/25 09:38:15 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2003 Rocky Bernstein @@ -130,6 +130,15 @@ extern "C" { */ char * cdio_get_default_device (const CdIo *obj); + /*! + Return the media catalog number MCN from the CD or NULL if there is none or + we don't have the ability to get it. + + Note: string is malloc'd so caller has to free() the returned + string when done with it. + */ + char *cdio_get_mcn (const CdIo *obj); + /*! Return a string containing the name of the driver in use. if CdIo is NULL (we haven't initialized a specific device driver), diff --git a/lib/_cdio_bincue.c b/lib/_cdio_bincue.c index 2caecd37..6597abb2 100644 --- a/lib/_cdio_bincue.c +++ b/lib/_cdio_bincue.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_bincue.c,v 1.29 2003/09/20 12:34:02 rocky Exp $ + $Id: _cdio_bincue.c,v 1.30 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002,2003 Rocky Bernstein @@ -24,7 +24,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: _cdio_bincue.c,v 1.29 2003/09/20 12:34:02 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_bincue.c,v 1.30 2003/09/25 09:38:16 rocky Exp $"; #include "cdio_assert.h" #include "cdio_private.h" @@ -95,7 +95,7 @@ typedef struct { } _img_private_t; static bool _cdio_image_read_cue (_img_private_t *_obj); -static uint32_t _cdio_stat_size (void *user_data); +static uint32_t _cdio_stat_size (void *env); /*! Initialize image structures. @@ -168,9 +168,9 @@ _cdio_init (_img_private_t *_obj) information in each sector. */ static off_t -_cdio_lseek (void *user_data, off_t offset, int whence) +_cdio_lseek (void *env, off_t offset, int whence) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; /* real_offset is the real byte offset inside the disk image The number below was determined empirically. I'm guessing @@ -215,9 +215,9 @@ _cdio_lseek (void *user_data, off_t offset, int whence) boundaries. */ static ssize_t -_cdio_read (void *user_data, void *data, size_t size) +_cdio_read (void *env, void *data, size_t size) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; char *p = data; ssize_t final_size=0; @@ -266,9 +266,9 @@ _cdio_read (void *user_data, void *data, size_t size) Return the size of the CD in logical block address (LBA) units. */ static uint32_t -_cdio_stat_size (void *user_data) +_cdio_stat_size (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; long size; int blocksize = _obj->sector_2336 ? M2RAW_SECTOR_SIZE : CDIO_CD_FRAMESIZE_RAW; @@ -463,10 +463,10 @@ _cdio_image_read_cue (_img_private_t *_obj) from lsn. Returns 0 if no error. */ static int -_cdio_read_audio_sectors (void *user_data, void *data, lsn_t lsn, +_cdio_read_audio_sectors (void *env, void *data, lsn_t lsn, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int ret; _cdio_init (_obj); @@ -499,10 +499,10 @@ _cdio_read_audio_sectors (void *user_data, void *data, lsn_t lsn, from lsn. Returns 0 if no error. */ static int -_cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sector (void *env, void *data, lsn_t lsn, bool mode2_form2) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int ret; char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; int blocksize = _obj->sector_2336 @@ -535,10 +535,10 @@ _cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, Returns 0 if no error. */ static int -_cdio_read_mode2_sectors (void *user_data, void *data, uint32_t lsn, +_cdio_read_mode2_sectors (void *env, void *data, uint32_t lsn, bool mode2_form2, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int i; int retval; @@ -567,9 +567,9 @@ _cdio_read_mode2_sectors (void *user_data, void *data, uint32_t lsn, Set the device to use in I/O operations. */ static int -_cdio_set_arg (void *user_data, const char key[], const char value[]) +_cdio_set_arg (void *env, const char key[], const char value[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { @@ -608,9 +608,9 @@ _cdio_set_arg (void *user_data, const char key[], const char value[]) Return the value associated with the key "arg". */ static const char * -_cdio_get_arg (void *user_data, const char key[]) +_cdio_get_arg (void *env, const char key[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { return _obj->gen.source_name; @@ -634,9 +634,9 @@ cdio_get_default_device_bincue(void) CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_first_track_num(void *user_data) +_cdio_get_first_track_num(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; _cdio_init (_obj); @@ -650,9 +650,9 @@ _cdio_get_first_track_num(void *user_data) CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_num_tracks(void *user_data) +_cdio_get_num_tracks(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; _cdio_init (_obj); return _obj->have_cue && _obj->total_tracks > 0 ? _obj->total_tracks : 1; @@ -663,9 +663,9 @@ _cdio_get_num_tracks(void *user_data) CDIO_INVALID_TRACK is returned on error. */ static track_format_t -_cdio_get_track_format(void *user_data, track_t track_num) +_cdio_get_track_format(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->gen.init) _cdio_init(_obj); @@ -684,9 +684,9 @@ _cdio_get_track_format(void *user_data, track_t track_num) FIXME: there's gotta be a better design for this and get_track_format? */ static bool -_cdio_get_track_green(void *user_data, track_t track_num) +_cdio_get_track_green(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->gen.init) _cdio_init(_obj); @@ -704,9 +704,9 @@ _cdio_get_track_green(void *user_data, track_t track_num) 1 is returned on error. */ static lba_t -_cdio_get_track_lba(void *user_data, track_t track_num) +_cdio_get_track_lba(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; _cdio_init (_obj); if (track_num == CDIO_CDROM_LEADOUT_TRACK) track_num = _obj->total_tracks+1; @@ -725,9 +725,9 @@ _cdio_get_track_lba(void *user_data, track_t track_num) */ static bool -_cdio_get_track_msf(void *user_data, track_t track_num, msf_t *msf) +_cdio_get_track_msf(void *env, track_t track_num, msf_t *msf) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; _cdio_init (_obj); if (NULL == msf) return false; @@ -816,6 +816,7 @@ cdio_open_common (_img_private_t **_data) .get_arg = _cdio_get_arg, .get_default_device = cdio_get_default_device_bincue, .get_first_track_num= _cdio_get_first_track_num, + .get_mcn = NULL, .get_num_tracks = _cdio_get_num_tracks, .get_track_format = _cdio_get_track_format, .get_track_green = _cdio_get_track_green, diff --git a/lib/_cdio_bsdi.c b/lib/_cdio_bsdi.c index 6655d394..160db0f3 100644 --- a/lib/_cdio_bsdi.c +++ b/lib/_cdio_bsdi.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_bsdi.c,v 1.12 2003/09/20 12:34:02 rocky Exp $ + $Id: _cdio_bsdi.c,v 1.13 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002,2003 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.12 2003/09/20 12:34:02 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_bsdi.c,v 1.13 2003/09/25 09:38:16 rocky Exp $"; #include #include @@ -502,6 +502,7 @@ cdio_open_bsdi (const char *source_name) .get_arg = _cdio_get_arg, .get_default_device = cdio_get_default_device_bsdi, .get_first_track_num= _cdio_get_first_track_num, + .get_mcn = NULL, .get_num_tracks = _cdio_get_num_tracks, .get_track_format = _cdio_get_track_format, .get_track_green = _cdio_get_track_green, diff --git a/lib/_cdio_freebsd.c b/lib/_cdio_freebsd.c index 2575cd8b..0625bcd8 100644 --- a/lib/_cdio_freebsd.c +++ b/lib/_cdio_freebsd.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_freebsd.c,v 1.15 2003/09/01 15:11:36 rocky Exp $ + $Id: _cdio_freebsd.c,v 1.16 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2003 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_freebsd.c,v 1.15 2003/09/01 15:11:36 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_freebsd.c,v 1.16 2003/09/25 09:38:16 rocky Exp $"; #include #include @@ -118,14 +118,15 @@ _read_mode2 (int fd, void *buf, lba_t lba, unsigned int nblocks, Returns 0 if no error. */ static int -_cdio_read_audio_sector (void *user_data, void *data, lsn_t lsn) +_cdio_read_audio_sectors (void *env, void *data, lsn_t lsn + unsigned int nblocks) { unsigned char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; struct cdrom_cdda cdda; cdda.cdda_addr = frame; - cdda.cdda_length = 1; + cdda.cdda_length = nblocks; cdda.cdda_data = buf; cdda.cdda_subcode = CDROM_DA_NO_SUBCODE; @@ -144,14 +145,14 @@ _cdio_read_audio_sector (void *user_data, void *data, lsn_t lsn) from lsn. Returns 0 if no error. */ static int -_cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sector (void *env, void *data, lsn_t lsn, bool mode2_form2) { char buf[M2RAW_SECTOR_SIZE] = { 0, }; struct cdrom_msf *msf = (struct cdrom_msf *) &buf; msf_t _msf; - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; cdio_lba_to_msf (cdio_lsn_to_lba(lsn), &_msf); msf->cdmsf_min0 = from_bcd8(_msf.m); @@ -205,10 +206,10 @@ _cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, Returns 0 if no error. */ static int -_cdio_read_mode2_sectors (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sectors (void *env, void *data, lsn_t lsn, bool mode2_form2, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int i; int retval; @@ -234,9 +235,9 @@ _cdio_read_mode2_sectors (void *user_data, void *data, lsn_t lsn, Return the size of the CD in logical block address (LBA) units. */ static uint32_t -_cdio_stat_size (void *user_data) +_cdio_stat_size (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; struct ioc_read_toc_single_entry tocent; uint32_t size; @@ -258,9 +259,9 @@ _cdio_stat_size (void *user_data) Set the key "arg" to "value" in source device. */ static int -_cdio_set_arg (void *user_data, const char key[], const char value[]) +_cdio_set_arg (void *env, const char key[], const char value[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { @@ -320,9 +321,9 @@ _cdio_read_toc (_img_private_t *_obj) Eject media. Return 1 if successful, 0 otherwise. */ static int -_cdio_eject_media (void *user_data) { +_cdio_eject_media (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int ret=2; int status; int fd; @@ -346,9 +347,9 @@ _cdio_eject_media (void *user_data) { Return the value associated with the key "arg". */ static const char * -_cdio_get_arg (void *user_data, const char key[]) +_cdio_get_arg (void *env, const char key[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { return _obj->gen.source_name; @@ -368,9 +369,9 @@ _cdio_get_arg (void *user_data, const char key[]) CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_first_track_num(void *user_data) +_cdio_get_first_track_num(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -382,9 +383,9 @@ _cdio_get_first_track_num(void *user_data) CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_num_tracks(void *user_data) +_cdio_get_num_tracks(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -395,9 +396,9 @@ _cdio_get_num_tracks(void *user_data) Get format of track. */ static track_format_t -_cdio_get_track_format(void *user_data, track_t track_num) +_cdio_get_track_format(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -425,9 +426,9 @@ _cdio_get_track_format(void *user_data, track_t track_num) FIXME: there's gotta be a better design for this and get_track_format? */ static bool -_cdio_get_track_green(void *user_data, track_t track_num) +_cdio_get_track_green(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -450,9 +451,9 @@ _cdio_get_track_green(void *user_data, track_t track_num) False is returned if there is no track entry. */ static bool -_cdio_get_track_msf(void *user_data, track_t track_num, msf_t *msf) +_cdio_get_track_msf(void *env, track_t track_num, msf_t *msf) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (NULL == msf) return false; @@ -474,7 +475,7 @@ _cdio_get_track_msf(void *user_data, track_t track_num, msf_t *msf) #endif /* HAVE_FREEBSD_CDROM */ /*! - Return a string containing the default VCD device if none is specified. + Return a string containing the default CD device if none is specified. */ char * cdio_get_default_device_freebsd() @@ -501,6 +502,7 @@ cdio_open_freebsd (const char *source_name) .get_arg = _cdio_get_arg, .get_default_device = _cdio_get_default_device_freebsd, .get_first_track_num= _cdio_get_first_track_num, + .get_mcn = NULL, .get_num_tracks = _cdio_get_num_tracks, .get_track_format = _cdio_get_track_format, .get_track_green = _cdio_get_track_green, @@ -508,7 +510,7 @@ cdio_open_freebsd (const char *source_name) .get_track_msf = _cdio_get_track_msf, .lseek = cdio_generic_lseek, .read = cdio_generic_read, - .read_audio_sector = _cdio_read_audio_sector, + .read_audio_sectors = _cdio_read_audio_sectors, .read_mode2_sector = _cdio_read_mode2_sector, .read_mode2_sectors = _cdio_read_mode2_sectors, .set_arg = _cdio_set_arg, diff --git a/lib/_cdio_linux.c b/lib/_cdio_linux.c index 489c7780..a814f050 100644 --- a/lib/_cdio_linux.c +++ b/lib/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.21 2003/09/20 12:34:02 rocky Exp $ + $Id: _cdio_linux.c,v 1.22 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002,2003 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.21 2003/09/20 12:34:02 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.22 2003/09/25 09:38:16 rocky Exp $"; #include @@ -267,10 +267,10 @@ _cdio_mmc_read_sectors (int fd, void *buf, lba_t lba, int sector_type, Can read only up to 25 blocks. */ static int -_cdio_read_audio_sectors (void *user_data, void *buf, lsn_t lsn, +_cdio_read_audio_sectors (void *env, void *buf, lsn_t lsn, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; return _cdio_mmc_read_sectors( _obj->gen.fd, buf, lsn, CDIO_MMC_READ_TYPE_CDDA, nblocks); } @@ -358,14 +358,14 @@ _read_packet_mode2_sectors (int fd, void *buf, lba_t lba, from lsn. Returns 0 if no error. */ static int -_cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sector (void *env, void *data, lsn_t lsn, bool mode2_form2) { char buf[M2RAW_SECTOR_SIZE] = { 0, }; struct cdrom_msf *msf = (struct cdrom_msf *) &buf; msf_t _msf; - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; cdio_lba_to_msf (cdio_lsn_to_lba(lsn), &_msf); msf->cdmsf_min0 = from_bcd8(_msf.m); @@ -425,13 +425,13 @@ _cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, from lsn. Returns 0 if no error. */ static int -_cdio_read_audio_sector (void *user_data, void *data, lsn_t lsn) +_cdio_read_audio_sector (void *env, void *data, lsn_t lsn) { char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; struct cdrom_msf *msf = (struct cdrom_msf *) &buf; msf_t _msf; - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; cdio_lsn_to_msf (lsn, &_msf); msf->cdmsf_min0 = from_bcd8(_msf.m); @@ -483,10 +483,10 @@ _cdio_read_audio_sector (void *user_data, void *data, lsn_t lsn) Returns 0 if no error. */ static int -_cdio_read_mode2_sectors (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sectors (void *env, void *data, lsn_t lsn, bool mode2_form2, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int i; int retval; @@ -513,9 +513,9 @@ _cdio_read_mode2_sectors (void *user_data, void *data, lsn_t lsn, Return the size of the CD in logical block address (LBA) units. */ static uint32_t -_cdio_stat_size (void *user_data) +_cdio_stat_size (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; struct cdrom_tocentry tocent; uint32_t size; @@ -537,9 +537,9 @@ _cdio_stat_size (void *user_data) Set the key "arg" to "value" in source device. */ static int -_cdio_set_arg (void *user_data, const char key[], const char value[]) +_cdio_set_arg (void *env, const char key[], const char value[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { @@ -684,9 +684,9 @@ _cdio_eject_scsi(int fd) Return 0 if success and 1 for failure, and 2 if no routine. */ static int -_cdio_eject_media (void *user_data) { +_cdio_eject_media (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int ret=2; int status; int fd; @@ -731,9 +731,9 @@ _cdio_eject_media (void *user_data) { Return the value associated with the key "arg". */ static const char * -_cdio_get_arg (void *user_data, const char key[]) +_cdio_get_arg (void *env, const char key[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { return _obj->gen.source_name; @@ -757,23 +757,40 @@ _cdio_get_arg (void *user_data, const char key[]) CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_first_track_num(void *user_data) +_cdio_get_first_track_num(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ; return FIRST_TRACK_NUM; } +/*! + Return the media catalog number MCN. + + Note: string is malloc'd so caller should free() then returned + string when done with it. + + */ +static char * +_cdio_get_mcn (void *env) { + + struct cdrom_mcn mcn; + _img_private_t *_obj = env; + if (ioctl(_obj->gen.fd, CDROM_GET_MCN, &mcn) != 0) + return NULL; + return strdup(mcn.medium_catalog_number); +} + /*! Return the number of tracks in the current medium. CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_num_tracks(void *user_data) +_cdio_get_num_tracks(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ; @@ -784,9 +801,9 @@ _cdio_get_num_tracks(void *user_data) Get format of track. */ static track_format_t -_cdio_get_track_format(void *user_data, track_t track_num) +_cdio_get_track_format(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ; @@ -817,9 +834,9 @@ _cdio_get_track_format(void *user_data, track_t track_num) FIXME: there's gotta be a better design for this and get_track_format? */ static bool -_cdio_get_track_green(void *user_data, track_t track_num) +_cdio_get_track_green(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->gen.toc_init) _cdio_read_toc (_obj) ; @@ -842,9 +859,9 @@ _cdio_get_track_green(void *user_data, track_t track_num) False is returned if there is no track entry. */ static bool -_cdio_get_track_msf(void *user_data, track_t track_num, msf_t *msf) +_cdio_get_track_msf(void *env, track_t track_num, msf_t *msf) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (NULL == msf) return false; @@ -945,6 +962,7 @@ cdio_open_linux (const char *orig_source_name) .get_arg = _cdio_get_arg, .get_default_device = cdio_get_default_device_linux, .get_first_track_num= _cdio_get_first_track_num, + .get_mcn = _cdio_get_mcn, .get_num_tracks = _cdio_get_num_tracks, .get_track_format = _cdio_get_track_format, .get_track_green = _cdio_get_track_green, diff --git a/lib/_cdio_nrg.c b/lib/_cdio_nrg.c index c750dfa8..06c08a2e 100644 --- a/lib/_cdio_nrg.c +++ b/lib/_cdio_nrg.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_nrg.c,v 1.17 2003/09/20 12:34:02 rocky Exp $ + $Id: _cdio_nrg.c,v 1.18 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2001,2003 Herbert Valerio Riedel @@ -38,7 +38,7 @@ #include "cdio_private.h" #include "_cdio_stdio.h" -static const char _rcsid[] = "$Id: _cdio_nrg.c,v 1.17 2003/09/20 12:34:02 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_nrg.c,v 1.18 2003/09/25 09:38:16 rocky Exp $"; /* structures used */ @@ -143,7 +143,7 @@ typedef struct { } _img_private_t; static bool _cdio_parse_nero_footer (_img_private_t *_obj); -static uint32_t _cdio_stat_size (void *user_data); +static uint32_t _cdio_stat_size (void *env); /* Updates internal track TOC, so we can later simulate ioctl(CDROMREADTOCENTRY). @@ -517,9 +517,9 @@ _cdio_init (_img_private_t *_obj) information in each sector. */ static off_t -_cdio_lseek (void *user_data, off_t offset, int whence) +_cdio_lseek (void *env, off_t offset, int whence) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; /* real_offset is the real byte offset inside the disk image The number below was determined empirically. I'm guessing @@ -576,16 +576,16 @@ _cdio_lseek (void *user_data, off_t offset, int whence) boundaries. */ static ssize_t -_cdio_read (void *user_data, void *buf, size_t size) +_cdio_read (void *env, void *buf, size_t size) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; return cdio_stream_read(_obj->gen.data_source, buf, size, 1); } static uint32_t -_cdio_stat_size (void *user_data) +_cdio_stat_size (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; return _obj->size; } @@ -595,10 +595,10 @@ _cdio_stat_size (void *user_data) from LSN. Returns 0 if no error. */ static int -_cdio_read_audio_sectors (void *user_data, void *data, lsn_t lsn, +_cdio_read_audio_sectors (void *env, void *data, lsn_t lsn, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; CdioListNode *node; @@ -635,10 +635,10 @@ _cdio_read_audio_sectors (void *user_data, void *data, lsn_t lsn, } static int -_cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sector (void *env, void *data, lsn_t lsn, bool mode2_form2) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; char buf[CDIO_CD_FRAMESIZE_RAW] = { 0, }; int blocksize = _obj->sector_2336 ? M2RAW_SECTOR_SIZE : CDIO_CD_FRAMESIZE_RAW; @@ -691,10 +691,10 @@ _cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, Returns 0 if no error. */ static int -_cdio_read_mode2_sectors (void *user_data, void *data, uint32_t lsn, +_cdio_read_mode2_sectors (void *env, void *data, uint32_t lsn, bool mode2_form2, unsigned nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int i; int retval; @@ -720,9 +720,9 @@ _cdio_read_mode2_sectors (void *user_data, void *data, uint32_t lsn, Set the device to use in I/O operations. */ static int -_cdio_set_arg (void *user_data, const char key[], const char value[]) +_cdio_set_arg (void *env, const char key[], const char value[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { @@ -743,9 +743,9 @@ _cdio_set_arg (void *user_data, const char key[], const char value[]) Return the value associated with the key "arg". */ static const char * -_cdio_get_arg (void *user_data, const char key[]) +_cdio_get_arg (void *env, const char key[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { return _obj->gen.source_name; @@ -767,9 +767,9 @@ cdio_get_default_device_nrg() CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_first_track_num(void *user_data) +_cdio_get_first_track_num(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; return _obj->first_track_num; } @@ -779,9 +779,9 @@ _cdio_get_first_track_num(void *user_data) one big track. */ static track_t -_cdio_get_num_tracks(void *user_data) +_cdio_get_num_tracks(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; return _obj->total_tracks; } @@ -791,9 +791,9 @@ _cdio_get_num_tracks(void *user_data) CDIO_INVALID_TRACK is returned on error. */ static track_format_t -_cdio_get_track_format(void *user_data, track_t track_num) +_cdio_get_track_format(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (track_num > _obj->total_tracks || track_num == 0) return TRACK_FORMAT_ERROR; @@ -810,9 +810,9 @@ _cdio_get_track_format(void *user_data, track_t track_num) FIXME: there's gotta be a better design for this and get_track_format? */ static bool -_cdio_get_track_green(void *user_data, track_t track_num) +_cdio_get_track_green(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (track_num > _obj->total_tracks || track_num == 0) return false; @@ -827,9 +827,9 @@ _cdio_get_track_green(void *user_data, track_t track_num) using track_num LEADOUT_TRACK or the total tracks+1. */ static bool -_cdio_get_track_msf(void *user_data, track_t track_num, msf_t *msf) +_cdio_get_track_msf(void *env, track_t track_num, msf_t *msf) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (NULL == msf) return 1; diff --git a/lib/_cdio_osx.c b/lib/_cdio_osx.c index 3f0a82f4..f20218ba 100644 --- a/lib/_cdio_osx.c +++ b/lib/_cdio_osx.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_osx.c,v 1.7 2003/09/20 12:34:02 rocky Exp $ + $Id: _cdio_osx.c,v 1.8 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2003 Rocky Bernstein from vcdimager code Copyright (C) 2001 Herbert Valerio Riedel @@ -31,7 +31,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_osx.c,v 1.7 2003/09/20 12:34:02 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_osx.c,v 1.8 2003/09/25 09:38:16 rocky Exp $"; #include #include @@ -83,8 +83,8 @@ typedef struct { } _img_private_t; static void -_cdio_osx_free (void *user_data) { - _img_private_t *_obj = user_data; +_cdio_osx_free (void *env) { + _img_private_t *_obj = env; if (NULL == _obj) return; cdio_generic_free(_obj); if (NULL != _obj->pp_lba) free((void *) _obj->pp_lba); @@ -155,10 +155,10 @@ _cdio_read_mode2_form2_sectors (int device_handle, void *data, lsn_t lsn, Returns 0 if no error. */ static int -_cdio_read_mode2_sectors (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sectors (void *env, void *data, lsn_t lsn, bool mode2_form2, unsigned int nblocks) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; int i; int retval; @@ -184,10 +184,10 @@ _cdio_read_mode2_sectors (void *user_data, void *data, lsn_t lsn, Returns 0 if no error. */ static int -_cdio_read_audio_sectors (void *user_data, void *data, lsn_t lsn, +_cdio_read_audio_sectors (void *env, void *data, lsn_t lsn, unsigned int nblocks) { - return _cdio_read_mode2_sectors(user_data, data, lsn, true, nblocks); + return _cdio_read_mode2_sectors(env, data, lsn, true, nblocks); } /*! @@ -195,19 +195,19 @@ _cdio_read_audio_sectors (void *user_data, void *data, lsn_t lsn, from lsn. Returns 0 if no error. */ static int -_cdio_read_mode2_sector (void *user_data, void *data, lsn_t lsn, +_cdio_read_mode2_sector (void *env, void *data, lsn_t lsn, bool mode2_form2) { - return _cdio_read_mode2_sectors(user_data, data, lsn, mode2_form2, 1); + return _cdio_read_mode2_sectors(env, data, lsn, mode2_form2, 1); } /*! Set the key "arg" to "value" in source device. */ static int -_cdio_set_arg (void *user_data, const char key[], const char value[]) +_cdio_set_arg (void *env, const char key[], const char value[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { @@ -406,9 +406,9 @@ _cdio_read_toc (_img_private_t *_obj) False is returned if there is no track entry. */ static lsn_t -_cdio_get_track_lba(void *user_data, track_t track_num) +_cdio_get_track_lba(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -432,9 +432,9 @@ _cdio_get_track_lba(void *user_data, track_t track_num) */ static int -_cdio_eject_media (void *user_data) { +_cdio_eject_media (void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; FILE *p_eject; char *psz_disk; @@ -476,18 +476,18 @@ _cdio_eject_media (void *user_data) { Return the size of the CD in logical block address (LBA) units. */ static uint32_t -_cdio_stat_size (void *user_data) +_cdio_stat_size (void *env) { - return _cdio_get_track_lba(user_data, CDIO_CDROM_LEADOUT_TRACK); + return _cdio_get_track_lba(env, CDIO_CDROM_LEADOUT_TRACK); } /*! Return the value associated with the key "arg". */ static const char * -_cdio_get_arg (void *user_data, const char key[]) +_cdio_get_arg (void *env, const char key[]) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!strcmp (key, "source")) { return _obj->gen.source_name; @@ -507,9 +507,9 @@ _cdio_get_arg (void *user_data, const char key[]) CDIO_INVALID_TRACK is returned on error. */ static track_t -_cdio_get_first_track_num(void *user_data) +_cdio_get_first_track_num(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -539,9 +539,9 @@ _cdio_get_first_track_num(void *user_data) This is the externally called interface. */ static track_t -_cdio_get_num_tracks(void *user_data) +_cdio_get_num_tracks(void *env) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; return( _obj->num_tracks ); @@ -551,9 +551,9 @@ _cdio_get_num_tracks(void *user_data) Get format of track. */ static track_format_t -_cdio_get_track_format(void *user_data, track_t track_num) +_cdio_get_track_format(void *env, track_t track_num) { - _img_private_t *_obj = user_data; + _img_private_t *_obj = env; if (!_obj->toc_init) _cdio_read_toc (_obj) ; @@ -586,7 +586,7 @@ _cdio_get_track_format(void *user_data, track_t track_num) FIXME: there's gotta be a better design for this and get_track_format? */ static bool -_cdio_get_track_green(void *user_data, track_t track_num) +_cdio_get_track_green(void *env, track_t track_num) { #if 0 @@ -637,6 +637,7 @@ cdio_open_osx (const char *source_name) .get_arg = _cdio_get_arg, .get_default_device = cdio_get_default_device_osx, .get_first_track_num= _cdio_get_first_track_num, + .get_mcn = NULL, /*there is a readMCN, but how to use? */ .get_num_tracks = _cdio_get_num_tracks, .get_track_format = _cdio_get_track_format, .get_track_green = _cdio_get_track_green, diff --git a/lib/_cdio_win32.c b/lib/_cdio_win32.c index 8b4ad1c2..be6c6bb0 100644 --- a/lib/_cdio_win32.c +++ b/lib/_cdio_win32.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_win32.c,v 1.13 2003/09/21 06:10:59 rocky Exp $ + $Id: _cdio_win32.c,v 1.14 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2003 Rocky Bernstein @@ -26,7 +26,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_win32.c,v 1.13 2003/09/21 06:10:59 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_win32.c,v 1.14 2003/09/25 09:38:16 rocky Exp $"; #include #include @@ -1076,6 +1076,7 @@ cdio_open_win32 (const char *source_name) .get_arg = _cdio_get_arg, .get_default_device = cdio_get_default_device_win32, .get_first_track_num= _cdio_get_first_track_num, + .get_mcn = NULL, .get_num_tracks = _cdio_get_num_tracks, .get_track_format = _cdio_get_track_format, .get_track_green = _cdio_get_track_green, diff --git a/lib/cdio.c b/lib/cdio.c index 94ffd309..c8ddb4b5 100644 --- a/lib/cdio.c +++ b/lib/cdio.c @@ -1,5 +1,5 @@ /* - $Id: cdio.c,v 1.26 2003/09/20 12:34:02 rocky Exp $ + $Id: cdio.c,v 1.27 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2003 Rocky Bernstein Copyright (C) 2001 Herbert Valerio Riedel @@ -35,7 +35,7 @@ #include #include "cdio_private.h" -static const char _rcsid[] = "$Id: cdio.c,v 1.26 2003/09/20 12:34:02 rocky Exp $"; +static const char _rcsid[] = "$Id: cdio.c,v 1.27 2003/09/25 09:38:16 rocky Exp $"; const char *track_format2str[6] = @@ -171,7 +171,7 @@ cdio_eject_media (CdIo **obj) if ((obj == NULL) || (*obj == NULL)) return 1; if ((*obj)->op.eject_media) { - int ret = (*obj)->op.eject_media ((*obj)->user_data); + int ret = (*obj)->op.eject_media ((*obj)->env); if (0 == ret) { cdio_destroy(*obj); *obj = NULL; @@ -194,7 +194,7 @@ cdio_get_arg (const CdIo *obj, const char key[]) if (obj == NULL) return NULL; if (obj->op.get_arg) { - return obj->op.get_arg (obj->user_data, key); + return obj->op.get_arg (obj->env, key); } else { return NULL; } @@ -257,12 +257,27 @@ cdio_get_first_track_num (const CdIo *obj) cdio_assert (obj != NULL); if (obj->op.get_first_track_num) { - return obj->op.get_first_track_num (obj->user_data); + return obj->op.get_first_track_num (obj->env); } else { return CDIO_INVALID_TRACK; } } +/*! + Return a string containing the name of the driver in use. + if CdIo is NULL (we haven't initialized a specific device driver), + then return NULL. +*/ +char * +cdio_get_mcn (const CdIo *obj) +{ + if (obj->op.get_mcn) { + return obj->op.get_mcn (obj->env); + } else { + return NULL; + } +} + /*! Return the number of tracks in the current medium. CDIO_INVALID_TRACK is returned on error. @@ -273,7 +288,7 @@ cdio_get_num_tracks (const CdIo *obj) if (obj == NULL) return CDIO_INVALID_TRACK; if (obj->op.get_num_tracks) { - return obj->op.get_num_tracks (obj->user_data); + return obj->op.get_num_tracks (obj->env); } else { return CDIO_INVALID_TRACK; } @@ -288,7 +303,7 @@ cdio_get_track_format(const CdIo *obj, track_t track_num) cdio_assert (obj != NULL); if (obj->op.get_track_format) { - return obj->op.get_track_format (obj->user_data, track_num); + return obj->op.get_track_format (obj->env, track_num); } else { return TRACK_FORMAT_ERROR; } @@ -308,7 +323,7 @@ cdio_get_track_green(const CdIo *obj, track_t track_num) cdio_assert (obj != NULL); if (obj->op.get_track_green) { - return obj->op.get_track_green (obj->user_data, track_num); + return obj->op.get_track_green (obj->env, track_num); } else { return false; } @@ -327,7 +342,7 @@ cdio_get_track_lba(const CdIo *obj, track_t track_num) if (obj == NULL) return CDIO_INVALID_LBA; if (obj->op.get_track_lba) { - return obj->op.get_track_lba (obj->user_data, track_num); + return obj->op.get_track_lba (obj->env, track_num); } else { msf_t msf; if (obj->op.get_track_msf) @@ -350,7 +365,7 @@ cdio_get_track_lsn(const CdIo *obj, track_t track_num) if (obj == NULL) return CDIO_INVALID_LBA; if (obj->op.get_track_lba) { - return cdio_lba_to_lsn(obj->op.get_track_lba (obj->user_data, track_num)); + return cdio_lba_to_lsn(obj->op.get_track_lba (obj->env, track_num)); } else { msf_t msf; if (cdio_get_track_msf(obj, track_num, &msf)) @@ -372,9 +387,9 @@ cdio_get_track_msf(const CdIo *obj, track_t track_num, /*out*/ msf_t *msf) cdio_assert (obj != NULL); if (obj->op.get_track_msf) { - return obj->op.get_track_msf (obj->user_data, track_num, msf); + return obj->op.get_track_msf (obj->env, track_num, msf); } else if (obj->op.get_track_lba) { - lba_t lba = obj->op.get_track_lba (obj->user_data, track_num); + lba_t lba = obj->op.get_track_lba (obj->env, track_num); if (lba == CDIO_INVALID_LBA) return false; cdio_lba_to_msf(lba, msf); return true; @@ -443,13 +458,13 @@ cdio_init(void) } CdIo * -cdio_new (void *user_data, const cdio_funcs *funcs) +cdio_new (void *env, const cdio_funcs *funcs) { CdIo *new_obj; new_obj = _cdio_malloc (sizeof (CdIo)); - new_obj->user_data = user_data; + new_obj->env = env; new_obj->op = *funcs; return new_obj; @@ -465,7 +480,7 @@ cdio_destroy (CdIo *obj) if (obj == NULL) return; if (obj->op.free != NULL) - obj->op.free (obj->user_data); + obj->op.free (obj->env); free (obj); } @@ -480,7 +495,7 @@ cdio_lseek (const CdIo *obj, off_t offset, int whence) if (obj == NULL) return -1; if (obj->op.lseek) - return obj->op.lseek (obj->user_data, offset, whence); + return obj->op.lseek (obj->env, offset, whence); return -1; } @@ -495,7 +510,7 @@ cdio_read (const CdIo *obj, void *buf, size_t size) if (obj == NULL) return -1; if (obj->op.read) - return obj->op.read (obj->user_data, buf, size); + return obj->op.read (obj->env, buf, size); return -1; } @@ -506,7 +521,7 @@ cdio_read_audio_sector (const CdIo *obj, void *buf, lsn_t lsn) cdio_assert (buf != NULL); if (obj->op.read_audio_sectors != NULL) - return obj->op.read_audio_sectors (obj->user_data, buf, lsn, 1); + return obj->op.read_audio_sectors (obj->env, buf, lsn, 1); return -1; } @@ -518,7 +533,7 @@ cdio_read_audio_sectors (const CdIo *obj, void *buf, lsn_t lsn, cdio_assert (buf != NULL); if (obj->op.read_audio_sectors != NULL) - return obj->op.read_audio_sectors (obj->user_data, buf, lsn, nblocks); + return obj->op.read_audio_sectors (obj->env, buf, lsn, nblocks); return -1; } @@ -585,7 +600,7 @@ cdio_read_mode2_sector (const CdIo *obj, void *buf, lsn_t lsn, || obj->op.read_mode2_sectors != NULL); if (obj->op.read_mode2_sector) - return obj->op.read_mode2_sector (obj->user_data, buf, lsn, is_form2); + return obj->op.read_mode2_sector (obj->env, buf, lsn, is_form2); /* fallback */ if (obj->op.read_mode2_sectors != NULL) @@ -601,7 +616,7 @@ cdio_read_mode2_sectors (const CdIo *obj, void *buf, lsn_t lsn, bool mode2raw, cdio_assert (buf != NULL); cdio_assert (obj->op.read_mode2_sectors != NULL); - return obj->op.read_mode2_sectors (obj->user_data, buf, lsn, + return obj->op.read_mode2_sectors (obj->env, buf, lsn, mode2raw, num_sectors); } @@ -610,7 +625,7 @@ cdio_stat_size (const CdIo *obj) { cdio_assert (obj != NULL); - return obj->op.stat_size (obj->user_data); + return obj->op.stat_size (obj->env); } /*! @@ -623,7 +638,7 @@ cdio_set_arg (CdIo *obj, const char key[], const char value[]) cdio_assert (obj->op.set_arg != NULL); cdio_assert (key != NULL); - return obj->op.set_arg (obj->user_data, key, value); + return obj->op.set_arg (obj->env, key, value); } static CdIo * diff --git a/lib/cdio_private.h b/lib/cdio_private.h index 2a79d5fc..9dec75f5 100644 --- a/lib/cdio_private.h +++ b/lib/cdio_private.h @@ -1,5 +1,5 @@ /* - $Id: cdio_private.h,v 1.13 2003/09/20 12:34:02 rocky Exp $ + $Id: cdio_private.h,v 1.14 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2003 Rocky Bernstein @@ -43,34 +43,40 @@ extern "C" { Eject media in CD drive. If successful, as a side effect we also free obj. Return 0 if success and 1 for failure. */ - int (*eject_media) (void *user_data); + int (*eject_media) (void *env); /*! Release and free resources associated with cd. */ - void (*free) (void *user_data); + void (*free) (void *env); /*! Return the value associated with the key "arg". */ - const char * (*get_arg) (void *user_data, const char key[]); + const char * (*get_arg) (void *env, const char key[]); /*! Return a string containing the default CD device if none is specified. */ char * (*get_default_device)(void); + /*! + Return the media catalog number MCN from the CD or NULL if + there is none or we don't have the ability to get it. + */ + char * (*get_mcn) (void *env); + /*! Return the number of of the first track. CDIO_INVALID_TRACK is returned on error. */ - track_t (*get_first_track_num) (void *user_data); + track_t (*get_first_track_num) (void *env); /*! Return the number of tracks in the current medium. CDIO_INVALID_TRACK is returned on error. */ - track_t (*get_num_tracks) (void *user_data); + track_t (*get_num_tracks) (void *env); /*! Return the starting LBA for track number @@ -79,12 +85,12 @@ extern "C" { using track_num LEADOUT_TRACK or the total tracks+1. CDIO_INVALID_LBA is returned on error. */ - lba_t (*get_track_lba) (void *user_data, track_t track_num); + lba_t (*get_track_lba) (void *env, track_t track_num); /*! Get format of track. */ - track_format_t (*get_track_format) (void *user_data, track_t track_num); + track_format_t (*get_track_format) (void *env, track_t track_num); /*! Return true if we have XA data (green, mode2 form1) or @@ -94,7 +100,7 @@ extern "C" { FIXME: there's gotta be a better design for this and get_track_format? */ - bool (*get_track_green) (void *user_data, track_t track_num); + bool (*get_track_green) (void *env, track_t track_num); /*! Return the starting MSF (minutes/secs/frames) for track number @@ -103,34 +109,34 @@ extern "C" { using track_num LEADOUT_TRACK or the total tracks+1. False is returned on error. */ - bool (*get_track_msf) (void *user_data, track_t track_num, msf_t *msf); + bool (*get_track_msf) (void *env, track_t track_num, msf_t *msf); /*! lseek - reposition read/write file offset Returns (off_t) -1 on error. Similar to libc's lseek() */ - off_t (*lseek) (void *user_data, off_t offset, int whence); + off_t (*lseek) (void *env, off_t offset, int whence); /*! Reads into buf the next size bytes. Returns -1 on error. Similar to libc's read() */ - ssize_t (*read) (void *user_data, void *buf, size_t size); + ssize_t (*read) (void *env, void *buf, size_t size); /*! Reads a single mode2 sector from cd device into buf starting from lsn. Returns 0 if no error. */ - int (*read_audio_sectors) (void *user_data, void *buf, lsn_t lsn, + int (*read_audio_sectors) (void *env, void *buf, lsn_t lsn, unsigned int nblocks); /*! Reads a single mode2 sector from cd device into buf starting from lsn. Returns 0 if no error. */ - int (*read_mode2_sector) (void *user_data, void *buf, lsn_t lsn, + int (*read_mode2_sector) (void *env, void *buf, lsn_t lsn, bool mode2raw); /*! @@ -138,18 +144,18 @@ extern "C" { from lsn. Returns 0 if no error. */ - int (*read_mode2_sectors) (void *user_data, void *buf, lsn_t lsn, + int (*read_mode2_sectors) (void *env, void *buf, lsn_t lsn, bool mode2raw, unsigned int nblocks); /*! Set the arg "key" with "value" in the source device. */ - int (*set_arg) (void *user_data, const char key[], const char value[]); + int (*set_arg) (void *env, const char key[], const char value[]); /*! Return the size of the CD in logical block address (LBA) units. */ - uint32_t (*stat_size) (void *user_data); + uint32_t (*stat_size) (void *env); } cdio_funcs; @@ -158,7 +164,7 @@ extern "C" { struct _CdIo { driver_id_t driver_id; /* Particular driver opened. */ cdio_funcs op; /* driver-specific routines handling implimentatin*/ - void *user_data; /* environment. Passed to routine above. */ + void *env; /* environment. Passed to routine above. */ }; /*! @@ -191,7 +197,7 @@ extern "C" { lba_t lba; /* Current LBA */ } internal_position_t; - CdIo * cdio_new (void *user_data, const cdio_funcs *funcs); + CdIo * cdio_new (void *env, const cdio_funcs *funcs); /* The below structure describes a specific CD Input driver */ typedef struct @@ -225,36 +231,36 @@ extern "C" { Bogus eject media when there is no ejectable media, e.g. a disk image We always return 2. Should we also free resources? */ - int cdio_generic_bogus_eject_media (void *user_data); + int cdio_generic_bogus_eject_media (void *env); /*! Release and free resources associated with cd. */ - void cdio_generic_free (void *user_data); + void cdio_generic_free (void *env); /*! Initialize CD device. */ - bool cdio_generic_init (void *user_data); + bool cdio_generic_init (void *env); /*! Reads into buf the next size bytes. Returns -1 on error. Is in fact libc's read(). */ - off_t cdio_generic_lseek (void *user_data, off_t offset, int whence); + off_t cdio_generic_lseek (void *env, off_t offset, int whence); /*! Reads into buf the next size bytes. Returns -1 on error. Is in fact libc's read(). */ - ssize_t cdio_generic_read (void *user_data, void *buf, size_t size); + ssize_t cdio_generic_read (void *env, void *buf, size_t size); /*! Release and free resources associated with stream or disk image. */ - void cdio_generic_stream_free (void *user_data); + void cdio_generic_stream_free (void *env); /*! Return true if source_name could be a device containing a CD-ROM on diff --git a/src/cd-info.c b/src/cd-info.c index cd0fb160..0fc8dd48 100644 --- a/src/cd-info.c +++ b/src/cd-info.c @@ -1,5 +1,5 @@ /* - $Id: cd-info.c,v 1.37 2003/09/21 04:36:41 rocky Exp $ + $Id: cd-info.c,v 1.38 2003/09/25 09:38:16 rocky Exp $ Copyright (C) 2003 Rocky Bernstein Copyright (C) 1996,1997,1998 Gerd Knorr @@ -66,7 +66,6 @@ #endif #if CDIO_IOCTL_FINISHED -struct cdrom_mcn mcn; struct cdrom_multisession ms; struct cdrom_subchnl sub; #endif @@ -736,6 +735,7 @@ main(int argc, const char *argv[]) int first_data = -1; /* # of first data track */ int first_audio = -1; /* # of first audio track */ cdio_analysis_t cdio_analysis; + char *media_catalog_number; memset(&cdio_analysis, 0, sizeof(cdio_analysis)); init(); @@ -845,19 +845,21 @@ main(int argc, const char *argv[]) if (i == num_tracks) i = CDIO_CDROM_LEADOUT_TRACK-1; } + /* get MCN */ + media_catalog_number = cdio_get_mcn(cdio); + printf("Get MCN : "); fflush(stdout); + if (NULL == media_catalog_number) + printf("not available\n"); + else { + printf("%s\n", media_catalog_number); + free(media_catalog_number); + } + + #if CDIO_IOCTL_FINISHED if (!opts.no_ioctl) { printf(STRONG "What ioctl's report...\n" NORMAL); -#ifdef CDROM_GET_MCN - /* get mcn */ - printf("Get MCN : "); fflush(stdout); - if (ioctl(filehandle,CDROM_GET_MCN, &mcn)) - printf("FAILED\n"); - else - printf("%s\n",mcn.medium_catalog_number); -#endif - #ifdef CDROM_DISC_STATUS /* get disk status */ printf("disc status : "); fflush(stdout); diff --git a/test/cdda.right b/test/cdda.right index cef76802..0d2f841d 100644 --- a/test/cdda.right +++ b/test/cdda.right @@ -6,6 +6,7 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 audio 170: 00:06:02 000302 leadout +Get MCN : not available __________________________________ CD Analysis Report Audio CD, CDDB disc ID is 02000401 diff --git a/test/check_opts0.right b/test/check_opts0.right index 29fd7390..05faba49 100644 --- a/test/check_opts0.right +++ b/test/check_opts0.right @@ -1,6 +1,7 @@ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/check_opts1.right b/test/check_opts1.right index 29fd7390..05faba49 100644 --- a/test/check_opts1.right +++ b/test/check_opts1.right @@ -1,6 +1,7 @@ This is free software; see the source for copying conditions. There is NO warranty; not even for MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/check_opts2.right b/test/check_opts2.right index 8a94dfef..c9a3ddc7 100644 --- a/test/check_opts2.right +++ b/test/check_opts2.right @@ -6,3 +6,4 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available diff --git a/test/check_opts3.right b/test/check_opts3.right index 8a94dfef..c9a3ddc7 100644 --- a/test/check_opts3.right +++ b/test/check_opts3.right @@ -6,3 +6,4 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available diff --git a/test/check_opts4.right b/test/check_opts4.right index 331f2135..54d2e136 100644 --- a/test/check_opts4.right +++ b/test/check_opts4.right @@ -6,6 +6,7 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/check_opts5.right b/test/check_opts5.right index 331f2135..54d2e136 100644 --- a/test/check_opts5.right +++ b/test/check_opts5.right @@ -6,6 +6,7 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/check_opts6.right b/test/check_opts6.right index 331f2135..54d2e136 100644 --- a/test/check_opts6.right +++ b/test/check_opts6.right @@ -6,6 +6,7 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/check_opts7.right b/test/check_opts7.right index 331f2135..54d2e136 100644 --- a/test/check_opts7.right +++ b/test/check_opts7.right @@ -6,6 +6,7 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/isofs-m1.right b/test/isofs-m1.right index ffe58446..d52794b7 100644 --- a/test/isofs-m1.right +++ b/test/isofs-m1.right @@ -6,6 +6,7 @@ CD-ROM Track List (1 - 1) #: MSF LSN Type 1: 00:02:00 000000 data 170: 00:06:02 000302 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/monvoisin.right b/test/monvoisin.right index 504ef675..ddfa3aa3 100644 --- a/test/monvoisin.right +++ b/test/monvoisin.right @@ -7,6 +7,7 @@ CD-ROM Track List (1 - 2) 1: 00:02:00 000000 XA 2: 00:18:51 001251 XA 170: 00:39:71 002846 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with CD-RTOS and ISO 9660 filesystem diff --git a/test/svcd_ogt_test_ntsc.right b/test/svcd_ogt_test_ntsc.right index ff838903..a342bc64 100644 --- a/test/svcd_ogt_test_ntsc.right +++ b/test/svcd_ogt_test_ntsc.right @@ -7,6 +7,7 @@ CD-ROM Track List (1 - 2) 1: 00:02:00 000000 XA 2: 00:09:01 000526 XA 170: 00:56:56 004106 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with CD-RTOS and ISO 9660 filesystem @@ -48,5 +49,5 @@ ISO9660 filesystem - ----1xrxrxr 0 0 [fn 00] [LSN 185] 2048 Jul 14 1978 00:00 tracks.svd XA sectors Super Video CD (SVCD) or Chaoji Video CD (CVD) -session #2 starts at track 2, LSN: 526, ISO 9660 blocks: 376 +session #2 starts at track 2, LSN: 526, ISO 9660 blocks: 376 ISO 9660: 376 blocks, label `SVCD_OGT_TEST_NTSC ' diff --git a/test/svcdgs.right b/test/svcdgs.right index f0a38688..4b939f07 100644 --- a/test/svcdgs.right +++ b/test/svcdgs.right @@ -7,6 +7,7 @@ CD-ROM Track List (1 - 2) 1: 00:02:00 000000 XA 2: 00:22:53 001553 XA 170: 01:17:62 005687 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with ISO 9660 filesystem diff --git a/test/vcd_demo.right b/test/vcd_demo.right index 527dc370..9a141028 100644 --- a/test/vcd_demo.right +++ b/test/vcd_demo.right @@ -8,6 +8,7 @@ CD-ROM Track List (1 - 3) 2: 00:17:57 001182 XA 3: 00:24:71 001721 XA 170: 00:30:10 002110 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with CD-RTOS and ISO 9660 filesystem @@ -92,5 +93,5 @@ publisher id: `LAURENS KOEHOORN' preparer id: `LKVCDIMAGER 5.0.7.10(WIN32)' application id: `' -session #2 starts at track 2, LSN: 1182, ISO 9660 blocks: 1032 +session #2 starts at track 2, LSN: 1182, ISO 9660 blocks: 1032 ISO 9660: 1032 blocks, label `V0469 ' diff --git a/test/videocd.right b/test/videocd.right index d1d1ebd8..0f5c9e5b 100644 --- a/test/videocd.right +++ b/test/videocd.right @@ -10,6 +10,7 @@ CD-ROM Track List (1 - 5) 4: 00:19:01 001276 XA 5: 00:22:01 001501 XA 170: 00:25:01 001726 leadout +Get MCN : not available __________________________________ CD Analysis Report CD-ROM with CD-RTOS and ISO 9660 filesystem @@ -56,5 +57,5 @@ ISO9660 filesystem - ----1xrxrxr 0 0 [fn 00] [LSN 185] 2048 Jul 14 1978 00:00 tracks.svd XA sectors Super Video CD (SVCD) or Chaoji Video CD (CVD) -session #2 starts at track 2, LSN: 826, ISO 9660 blocks: 676 +session #2 starts at track 2, LSN: 826, ISO 9660 blocks: 676 ISO 9660: 676 blocks, label `SVIDEOCD '