Add get_mcn, although it really only works on GNU/Linux right now.

This commit is contained in:
rocky
2003-09-25 09:38:15 +00:00
parent bc84344a3d
commit 6450be398b
26 changed files with 281 additions and 210 deletions

View File

@@ -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 <hvr@gnu.org>
Copyright (C) 2003 Rocky Bernstein <rocky@panix.com>
@@ -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),

View File

@@ -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 <hvr@gnu.org>
Copyright (C) 2002,2003 Rocky Bernstein <rocky@panix.com>
@@ -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,

View File

@@ -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 <hvr@gnu.org>
Copyright (C) 2002,2003 Rocky Bernstein <rocky@panix.com>
@@ -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 <cdio/sector.h>
#include <cdio/util.h>
@@ -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,

View File

@@ -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 <rocky@panix.com>
@@ -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 <cdio/sector.h>
#include <cdio/util.h>
@@ -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,

View File

@@ -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 <hvr@gnu.org>
Copyright (C) 2002,2003 Rocky Bernstein <rocky@panix.com>
@@ -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 <string.h>
@@ -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,

View File

@@ -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 <hvr@gnu.org>
@@ -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;

View File

@@ -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 <rocky@panix.com> from vcdimager code
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
@@ -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 <cdio/sector.h>
#include <cdio/util.h>
@@ -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,

View File

@@ -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 <rocky@panix.com>
@@ -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 <cdio/cdio.h>
#include <cdio/sector.h>
@@ -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,

View File

@@ -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 <rocky@panix.com>
Copyright (C) 2001 Herbert Valerio Riedel <hvr@gnu.org>
@@ -35,7 +35,7 @@
#include <cdio/logging.h>
#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 *

View File

@@ -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 <rocky@panix.com>
@@ -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

View File

@@ -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 <rocky@panix.com>
Copyright (C) 1996,1997,1998 Gerd Knorr <kraxel@bytesex.org>
@@ -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);

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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

View File

@@ -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