diff --git a/include/cdio/scsi_mmc.h b/include/cdio/scsi_mmc.h index 8a239ccc..5e65da49 100644 --- a/include/cdio/scsi_mmc.h +++ b/include/cdio/scsi_mmc.h @@ -1,5 +1,5 @@ /* - $Id: scsi_mmc.h,v 1.21 2004/07/28 11:45:21 rocky Exp $ + $Id: scsi_mmc.h,v 1.22 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -137,7 +137,10 @@ typedef enum scsi_mmc_direction { #define CDIO_MMC_SET_READ_TYPE(cdb, sector_type) \ cdb[1] = (sector_type << 2) - + +#define CDIO_MMC_SET_LEN16(cdb, pos, len) \ + cdb[pos ] = (len >> 8) & 0xff; \ + cdb[pos+1] = (len ) & 0xff #define CDIO_MMC_SET_READ_LBA(cdb, lba) \ cdb[2] = (lba >> 24) & 0xff; \ @@ -154,8 +157,7 @@ typedef enum scsi_mmc_direction { cdb[8] = (len ) & 0xff #define CDIO_MMC_SET_READ_LENGTH16(cdb, len) \ - cdb[7] = (len >> 8) & 0xff; \ - cdb[8] = (len ) & 0xff + CDIO_MMC_SET_LEN16(cdb, 7, len) #define CDIO_MMC_SET_READ_LENGTH8(cdb, len) \ cdb[8] = (len ) & 0xff diff --git a/lib/_cdio_generic.c b/lib/_cdio_generic.c index f8d150cb..5e15e95f 100644 --- a/lib/_cdio_generic.c +++ b/lib/_cdio_generic.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_generic.c,v 1.19 2004/06/26 00:39:00 rocky Exp $ + $Id: _cdio_generic.c,v 1.20 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.19 2004/06/26 00:39:00 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_generic.c,v 1.20 2004/07/29 02:16:20 rocky Exp $"; #include #include @@ -225,3 +225,123 @@ cdio_add_device_list(char **device_list[], const char *drive, int *num_drives) } +/*! + Get disc type associated with cd object. +*/ +discmode_t +get_discmode_generic (void *p_user_data ) +{ + generic_img_private_t *p_env = p_user_data; + track_t i_track; + discmode_t discmode=CDIO_DISC_MODE_NO_INFO; + + /* See if this is a DVD. */ + cdio_dvd_struct_t dvd; /* DVD READ STRUCT for layer 0. */ + + dvd.physical.type = CDIO_DVD_STRUCT_PHYSICAL; + dvd.physical.layer_num = 0; + if (0 == scsi_mmc_get_dvd_struct_physical (p_env->cdio, &dvd)) { + switch(dvd.physical.layer[0].book_type) { + case CDIO_DVD_BOOK_DVD_ROM: return CDIO_DISC_MODE_DVD_ROM; + case CDIO_DVD_BOOK_DVD_RAM: return CDIO_DISC_MODE_DVD_RAM; + case CDIO_DVD_BOOK_DVD_R: return CDIO_DISC_MODE_DVD_R; + case CDIO_DVD_BOOK_DVD_RW: return CDIO_DISC_MODE_DVD_RW; + case CDIO_DVD_BOOK_DVD_PR: return CDIO_DISC_MODE_DVD_PR; + case CDIO_DVD_BOOK_DVD_PRW: return CDIO_DISC_MODE_DVD_PRW; + default: return CDIO_DISC_MODE_DVD_OTHER; + } + } + + if (!p_env->toc_init) + p_env->cdio->op.read_toc (p_user_data); + + if (!p_env->toc_init) + return CDIO_DISC_MODE_NO_INFO; + + for (i_track = p_env->i_first_track; + i_track < p_env->i_first_track + p_env->i_tracks ; + i_track ++) { + track_format_t track_fmt = + p_env->cdio->op.get_track_format(p_env, i_track); + + switch(track_fmt) { + case TRACK_FORMAT_AUDIO: + switch(discmode) { + case CDIO_DISC_MODE_NO_INFO: + discmode = CDIO_DISC_MODE_CD_DA; + break; + case CDIO_DISC_MODE_CD_DA: + case CDIO_DISC_MODE_CD_MIXED: + case CDIO_DISC_MODE_ERROR: + /* No change*/ + break; + default: + discmode = CDIO_DISC_MODE_CD_MIXED; + } + break; + case TRACK_FORMAT_XA: + switch(discmode) { + case CDIO_DISC_MODE_NO_INFO: + discmode = CDIO_DISC_MODE_CD_XA; + break; + case CDIO_DISC_MODE_CD_XA: + case CDIO_DISC_MODE_CD_MIXED: + case CDIO_DISC_MODE_ERROR: + /* No change*/ + break; + default: + discmode = CDIO_DISC_MODE_CD_MIXED; + } + break; + case TRACK_FORMAT_DATA: + switch(discmode) { + case CDIO_DISC_MODE_NO_INFO: + discmode = CDIO_DISC_MODE_CD_DATA; + break; + case CDIO_DISC_MODE_CD_DATA: + case CDIO_DISC_MODE_CD_MIXED: + case CDIO_DISC_MODE_ERROR: + /* No change*/ + break; + default: + discmode = CDIO_DISC_MODE_CD_MIXED; + } + break; + case TRACK_FORMAT_ERROR: + default: + discmode = CDIO_DISC_MODE_ERROR; + } + } + return discmode; +} + +/*! + Return the number of of the first track. + CDIO_INVALID_TRACK is returned on error. +*/ +track_t +get_first_track_num_generic(void *p_user_data) +{ + generic_img_private_t *p_env = p_user_data; + + if (!p_env->toc_init) + p_env->cdio->op.read_toc (p_user_data); + + return p_env->toc_init ? p_env->i_first_track : CDIO_INVALID_TRACK; +} + + +/*! + Return the number of tracks in the current medium. +*/ + track_t +get_num_tracks_generic(void *p_user_data) +{ + generic_img_private_t *p_env = p_user_data; + + if (!p_env->toc_init) + p_env->cdio->op.read_toc (p_user_data); + + return p_env->toc_init ? p_env->i_tracks : CDIO_INVALID_TRACK; +} + diff --git a/lib/_cdio_linux.c b/lib/_cdio_linux.c index 2ac1f017..3f5f3f77 100644 --- a/lib/_cdio_linux.c +++ b/lib/_cdio_linux.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_linux.c,v 1.85 2004/07/28 11:45:21 rocky Exp $ + $Id: _cdio_linux.c,v 1.86 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -27,7 +27,7 @@ # include "config.h" #endif -static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.85 2004/07/28 11:45:21 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.86 2004/07/29 02:16:20 rocky Exp $"; #include @@ -70,12 +70,6 @@ static const char _rcsid[] = "$Id: _cdio_linux.c,v 1.85 2004/07/28 11:45:21 rock #include #include -/* Default value in milliseconds we will wait for a command to - complete. */ -#define DEFAULT_TIMEOUT 500 - -#define TOTAL_TRACKS (p_env->tochdr.cdth_trk1) - typedef enum { _AM_NONE, _AM_IOCTL, @@ -109,7 +103,7 @@ typedef struct { /**** prototypes for static functions ****/ static bool is_cdrom_linux(const char *drive, char *mnttype); -static bool read_toc_linux (_img_private_t *p_env); +static bool read_toc_linux (void *p_user_data); static int run_scsi_cmd_linux( const void *p_user_data, unsigned int i_timeout, unsigned int i_cdb, @@ -229,20 +223,6 @@ get_arg_linux (void *env, const char key[]) return NULL; } -/*! - Return the number of of the first track. - CDIO_INVALID_TRACK is returned on error. -*/ -static track_t -get_first_track_num_linux(void *p_user_data) -{ - _img_private_t *p_env = p_user_data; - - if (!p_env->gen.toc_init) read_toc_linux (p_env) ; - - return p_env->gen.toc_init ? p_env->gen.i_first_track : CDIO_INVALID_TRACK; -} - /*! Return the the kind of drive capabilities of device. @@ -251,12 +231,12 @@ get_first_track_num_linux(void *p_user_data) */ static void -get_drive_cap_linux (const void *env, +get_drive_cap_linux (const void *p_user_data, cdio_drive_read_cap_t *p_read_cap, cdio_drive_write_cap_t *p_write_cap, cdio_drive_misc_cap_t *p_misc_cap) { - const _img_private_t *_obj = env; + const _img_private_t *_obj = p_user_data; int32_t i_drivetype; i_drivetype = ioctl (_obj->gen.fd, CDROM_GET_CAPABILITY, CDSL_CURRENT); @@ -327,20 +307,6 @@ _get_mcn_linux (const void *env) { 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 -_get_num_tracks_linux(void *p_user_data) -{ - _img_private_t *p_env = p_user_data; - - if (!p_env->gen.toc_init) read_toc_linux (p_env) ; - - return p_env->gen.toc_init ? TOTAL_TRACKS : CDIO_INVALID_TRACK; -} - /*! Get format of track. */ @@ -349,7 +315,7 @@ _get_track_format_linux(void *p_user_data, track_t i_track) { _img_private_t *p_env = p_user_data; - if (i_track > (TOTAL_TRACKS+p_env->gen.i_first_track) + if (i_track > (p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) return TRACK_FORMAT_ERROR; @@ -383,9 +349,9 @@ _get_track_green_linux(void *p_user_data, track_t i_track) { _img_private_t *p_env = p_user_data; - if (!p_env->gen.toc_init) read_toc_linux (p_env) ; + if (!p_env->gen.toc_init) read_toc_linux (p_user_data) ; - if (i_track >= (TOTAL_TRACKS+p_env->gen.i_first_track) + if (i_track >= (p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) return false; @@ -413,12 +379,12 @@ _get_track_msf_linux(void *p_user_data, track_t i_track, msf_t *msf) if (NULL == msf) return false; - if (!p_env->gen.toc_init) read_toc_linux (p_env) ; + if (!p_env->gen.toc_init) read_toc_linux (p_user_data) ; if (i_track == CDIO_CDROM_LEADOUT_TRACK) - i_track = TOTAL_TRACKS + p_env->gen.i_first_track; + i_track = p_env->gen.i_tracks + p_env->gen.i_first_track; - if (i_track > (TOTAL_TRACKS+p_env->gen.i_first_track) + if (i_track > (p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) { return false; } else { @@ -838,8 +804,9 @@ _read_mode2_sectors_linux (void *p_user_data, void *data, lsn_t lsn, Return false if successful or true if an error. */ static bool -read_toc_linux (_img_private_t *p_env) +read_toc_linux (void *p_user_data) { + _img_private_t *p_env = p_user_data; int i; /* read TOC header */ @@ -850,9 +817,10 @@ read_toc_linux (_img_private_t *p_env) } p_env->gen.i_first_track = p_env->tochdr.cdth_trk0; + p_env->gen.i_tracks = p_env->tochdr.cdth_trk1; /* read individual tracks */ - for (i= p_env->gen.i_first_track; i<=TOTAL_TRACKS; i++) { + for (i= p_env->gen.i_first_track; i<=p_env->gen.i_tracks; i++) { p_env->tocent[i-p_env->gen.i_first_track].cdte_track = i; p_env->tocent[i-p_env->gen.i_first_track].cdte_format = CDROM_MSF; if ( ioctl(p_env->gen.fd, CDROMREADTOCENTRY, @@ -872,11 +840,11 @@ read_toc_linux (_img_private_t *p_env) } /* read the lead-out track */ - p_env->tocent[TOTAL_TRACKS].cdte_track = CDIO_CDROM_LEADOUT_TRACK; - p_env->tocent[TOTAL_TRACKS].cdte_format = CDROM_MSF; + p_env->tocent[p_env->gen.i_tracks].cdte_track = CDIO_CDROM_LEADOUT_TRACK; + p_env->tocent[p_env->gen.i_tracks].cdte_format = CDROM_MSF; if (ioctl(p_env->gen.fd, CDROMREADTOCENTRY, - &p_env->tocent[TOTAL_TRACKS]) == -1 ) { + &p_env->tocent[p_env->gen.i_tracks]) == -1 ) { cdio_warn("%s: %s\n", "error in ioctl CDROMREADTOCENTRY for lead-out", strerror(errno)); @@ -884,7 +852,7 @@ read_toc_linux (_img_private_t *p_env) } /* - struct cdrom_msf0 *msf= &env->tocent[TOTAL_TRACKS].cdte_addr.msf; + struct cdrom_msf0 *msf= &env->tocent[p_env->gen.i_tracks].cdte_addr.msf; fprintf (stdout, "--- track# %d (msf %2.2x:%2.2x:%2.2x)\n", i, msf->minute, msf->second, msf->frame); @@ -1034,7 +1002,7 @@ get_cdtext_linux (void *p_user_data, track_t i_track) if ( NULL == p_env || (0 != i_track - && i_track >= TOTAL_TRACKS+p_env->gen.i_first_track ) ) + && i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track ) ) return NULL; p_env->b_cdtext_init = init_cdtext_linux(p_env); @@ -1204,9 +1172,9 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode) .get_devices = cdio_get_devices_linux, .get_discmode = get_discmode_linux, .get_drive_cap = get_drive_cap_linux, - .get_first_track_num= get_first_track_num_linux, + .get_first_track_num= get_first_track_num_generic, .get_mcn = _get_mcn_linux, - .get_num_tracks = _get_num_tracks_linux, + .get_num_tracks = get_num_tracks_generic, .get_track_format = _get_track_format_linux, .get_track_green = _get_track_green_linux, .get_track_lba = NULL, /* This could be implemented if need be. */ @@ -1218,6 +1186,7 @@ cdio_open_am_linux (const char *psz_orig_source, const char *access_mode) .read_mode1_sectors = _read_mode1_sectors_linux, .read_mode2_sector = _read_mode2_sector_linux, .read_mode2_sectors = _read_mode2_sectors_linux, + .read_toc = read_toc_linux, .run_scsi_mmc_cmd = &run_scsi_cmd_linux, .set_arg = set_arg_linux, .stat_size = stat_size_linux diff --git a/lib/_cdio_sunos.c b/lib/_cdio_sunos.c index 91d4708d..5ca366e3 100644 --- a/lib/_cdio_sunos.c +++ b/lib/_cdio_sunos.c @@ -1,5 +1,5 @@ /* - $Id: _cdio_sunos.c,v 1.65 2004/07/28 01:09:59 rocky Exp $ + $Id: _cdio_sunos.c,v 1.66 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2001 Herbert Valerio Riedel Copyright (C) 2002, 2003, 2004 Rocky Bernstein @@ -38,7 +38,7 @@ #ifdef HAVE_SOLARIS_CDROM -static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.65 2004/07/28 01:09:59 rocky Exp $"; +static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.66 2004/07/29 02:16:20 rocky Exp $"; #ifdef HAVE_GLOB_H #include @@ -65,8 +65,6 @@ static const char _rcsid[] = "$Id: _cdio_sunos.c,v 1.65 2004/07/28 01:09:59 rock #include #include "cdtext_private.h" -#define TOTAL_TRACKS (p_env->tochdr.cdth_trk1) - /* reader */ typedef enum { @@ -407,8 +405,9 @@ _set_arg_solaris (void *p_user_data, const char key[], const char value[]) Return true if successful or false if an error. */ static bool -read_toc_solaris (_img_private_t *p_env) +read_toc_solaris (void *p_user_data) { + _img_private_t *p_env = p_user_data; int i; /* read TOC header */ @@ -419,9 +418,10 @@ read_toc_solaris (_img_private_t *p_env) } p_env->gen.i_first_track = p_env->tochdr.cdth_trk0; + p_env->gen.i_tracks = p_env->tochdr.cdth_trk1; /* read individual tracks */ - for (i=p_env->tochdr.cdth_trk0; i<=p_env->tochdr.cdth_trk1; i++) { + for (i=p_env->gen.i_first_track; i<=gen.i_tracks; i++) { p_env->tocent[i-1].cdte_track = i; p_env->tocent[i-1].cdte_format = CDIO_CDROM_MSF; if ( ioctl(p_env->gen.fd, CDROMREADTOCENTRY, &p_env->tocent[i-1]) == -1 ) { @@ -494,7 +494,7 @@ get_cdtext_solaris (void *p_user_data, track_t i_track) if ( NULL == p_env || (0 != i_track - && i_track >= TOTAL_TRACKS+p_env->gen.i_first_track ) + && i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track ) || p_env ->b_cdtext_error ) return NULL; @@ -603,123 +603,6 @@ cdio_get_default_device_solaris(void) return strdup(DEFAULT_CDIO_DEVICE); } -/*! - Get disc type associated with cd object. -*/ -static discmode_t -get_discmode_solaris (void *p_user_data) -{ - _img_private_t *p_env = p_user_data; - track_t i_track; - discmode_t discmode=CDIO_DISC_MODE_NO_INFO; - - /* See if this is a DVD. */ - cdio_dvd_struct_t dvd; /* DVD READ STRUCT for layer 0. */ - - dvd.physical.type = CDIO_DVD_STRUCT_PHYSICAL; - dvd.physical.layer_num = 0; - if (0 == scsi_mmc_get_dvd_struct_physical_private (p_env, - &run_scsi_cmd_solaris, - &dvd)) { - switch(dvd.physical.layer[0].book_type) { - case CDIO_DVD_BOOK_DVD_ROM: return CDIO_DISC_MODE_DVD_ROM; - case CDIO_DVD_BOOK_DVD_RAM: return CDIO_DISC_MODE_DVD_RAM; - case CDIO_DVD_BOOK_DVD_R: return CDIO_DISC_MODE_DVD_R; - case CDIO_DVD_BOOK_DVD_RW: return CDIO_DISC_MODE_DVD_RW; - case CDIO_DVD_BOOK_DVD_PR: return CDIO_DISC_MODE_DVD_PR; - case CDIO_DVD_BOOK_DVD_PRW: return CDIO_DISC_MODE_DVD_PRW; - default: return CDIO_DISC_MODE_DVD_OTHER; - } - } - - if (!p_env->gen.toc_init) - read_toc_solaris (p_env); - - if (!p_env->gen.toc_init) - return CDIO_DISC_MODE_NO_INFO; - - for (i_track = p_env->gen.i_first_track; - i_track < p_env->gen.i_first_track + TOTAL_TRACKS ; - i_track ++) { - track_format_t track_fmt=get_track_format_solaris(p_env, i_track); - - switch(track_fmt) { - case TRACK_FORMAT_AUDIO: - switch(discmode) { - case CDIO_DISC_MODE_NO_INFO: - discmode = CDIO_DISC_MODE_CD_DA; - break; - case CDIO_DISC_MODE_CD_DA: - case CDIO_DISC_MODE_CD_MIXED: - case CDIO_DISC_MODE_ERROR: - /* No change*/ - break; - default: - discmode = CDIO_DISC_MODE_CD_MIXED; - } - break; - case TRACK_FORMAT_XA: - switch(discmode) { - case CDIO_DISC_MODE_NO_INFO: - discmode = CDIO_DISC_MODE_CD_XA; - break; - case CDIO_DISC_MODE_CD_XA: - case CDIO_DISC_MODE_CD_MIXED: - case CDIO_DISC_MODE_ERROR: - /* No change*/ - break; - default: - discmode = CDIO_DISC_MODE_CD_MIXED; - } - break; - case TRACK_FORMAT_DATA: - switch(discmode) { - case CDIO_DISC_MODE_NO_INFO: - discmode = CDIO_DISC_MODE_CD_DATA; - break; - case CDIO_DISC_MODE_CD_DATA: - case CDIO_DISC_MODE_CD_MIXED: - case CDIO_DISC_MODE_ERROR: - /* No change*/ - break; - default: - discmode = CDIO_DISC_MODE_CD_MIXED; - } - break; - case TRACK_FORMAT_ERROR: - default: - discmode = CDIO_DISC_MODE_ERROR; - } - } - return discmode; -} - -/*! - Return the number of of the first track. - CDIO_INVALID_TRACK is returned on error. -*/ -static track_t -get_first_track_num_solaris(void *p_user_data) -{ - _img_private_t *p_env = p_user_data; - - if (!p_env->gen.toc_init) read_toc_solaris (p_env) ; - - return p_env->gen.i_first_track; -} - - -/*! - Return the number of tracks in the current medium. -*/ -static track_t -_cdio_get_num_tracks(void *p_user_data) -{ - _img_private_t *p_env = p_user_data; - - return TOTAL_TRACKS; -} - /*! Get format of track. */ @@ -728,7 +611,7 @@ get_track_format_solaris(void *p_user_data, track_t i_track) { _img_private_t *p_env = p_user_data; - if ( (i_track > TOTAL_TRACKS+p_env->gen.i_first_track) + if ( (i_track > p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) return TRACK_FORMAT_ERROR; @@ -765,7 +648,7 @@ _cdio_get_track_green(void *p_user_data, track_t i_track) if (!p_env->gen.init) init_solaris(p_env); if (!p_env->gen.toc_init) read_toc_solaris (p_env) ; - if (i_track >= TOTAL_TRACKS+p_env->gen.i_first_track + if (i_track >= p_env->gen.i_tracks+p_env->gen.i_first_track || i_track < p_env->gen.i_first_track) return false; @@ -797,9 +680,9 @@ _cdio_get_track_msf(void *p_user_data, track_t i_track, msf_t *msf) if (!p_env->gen.toc_init) read_toc_solaris (p_env) ; if (i_track == CDIO_CDROM_LEADOUT_TRACK) - i_track = TOTAL_TRACKS + p_env->gen.i_first_track; + i_track = p_env->gen.i_tracks + p_env->gen.i_first_track; - if (i_track > (TOTAL_TRACKS+p_env->gen.i_first_track) + if (i_track > (p_env->gen.i_tracks+p_env->gen.i_first_track) || i_track < p_env->gen.i_first_track) { return false; } else { @@ -883,11 +766,11 @@ cdio_open_am_solaris (const char *psz_orig_source, const char *access_mode) .get_cdtext = get_cdtext_solaris, .get_default_device = cdio_get_default_device_solaris, .get_devices = cdio_get_devices_solaris, - .get_discmode = get_discmode_solaris, + .get_discmode = get_discmode_generic, .get_drive_cap = scsi_mmc_get_drive_cap_generic, - .get_first_track_num= get_first_track_num_solaris, + .get_first_track_num= get_first_track_num_generic, .get_mcn = scsi_mmc_get_mcn_generic, - .get_num_tracks = _cdio_get_num_tracks, + .get_num_tracks = get_num_tracks_generic, .get_track_format = get_track_format_solaris, .get_track_green = _cdio_get_track_green, .get_track_lba = NULL, /* This could be implemented if need be. */ @@ -899,6 +782,7 @@ cdio_open_am_solaris (const char *psz_orig_source, const char *access_mode) .read_mode1_sectors = _read_mode1_sectors_solaris, .read_mode2_sector = _read_mode2_sector_solaris, .read_mode2_sectors = _read_mode2_sectors_solaris, + .read_toc = &read_toc_solaris, .run_scsi_mmc_cmd = &run_scsi_cmd_solaris, .stat_size = _cdio_stat_size, .set_arg = _set_arg_solaris diff --git a/lib/cdio_private.h b/lib/cdio_private.h index acb6d0f8..f4a1b8f4 100644 --- a/lib/cdio_private.h +++ b/lib/cdio_private.h @@ -1,5 +1,5 @@ /* - $Id: cdio_private.h,v 1.35 2004/07/27 01:06:02 rocky Exp $ + $Id: cdio_private.h,v 1.36 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein @@ -181,14 +181,14 @@ extern "C" { from lsn. Returns 0 if no error. */ - int (*read_mode2_sectors) (void *env, void *buf, lsn_t lsn, + int (*read_mode2_sectors) (void *p_env, void *p_buf, lsn_t lsn, bool mode2_form2, unsigned int nblocks); /*! Reads a single mode1 sector from cd device into buf starting from lsn. Returns 0 if no error. */ - int (*read_mode1_sector) (void *env, void *buf, lsn_t lsn, + int (*read_mode1_sector) (void *p_env, void *p_buf, lsn_t lsn, bool mode1_form2); /*! @@ -196,16 +196,17 @@ extern "C" { from lsn. Returns 0 if no error. */ - int (*read_mode1_sectors) (void *env, void *buf, lsn_t lsn, + int (*read_mode1_sectors) (void *p_env, void *p_buf, lsn_t lsn, bool mode1_form2, unsigned int nblocks); + bool (*read_toc) ( void *p_env ) ; + /*! Run a SCSI MMC command. cdio CD structure set by cdio_open(). - i_timeout time in milliseconds we will wait for the command - to complete. If this value is -1, use the default - time-out value. + i_timeout_ms time in milliseconds we will wait for the command + to complete. cdb_len number of bytes in cdb (6, 10, or 12). cdb CDB bytes. All values that are needed should be set on input. @@ -228,9 +229,6 @@ extern "C" { */ uint32_t (*stat_size) (void *env); - /*! Pointer to parent container object. */ - CdIo *cdio; - } cdio_funcs; @@ -258,6 +256,7 @@ extern "C" { */ int fd; /**< File descriptor of device */ track_t i_first_track; /**< The starting track number. */ + track_t i_tracks; /**< The number of tracks. */ CdioDataSource *data_source; CdIo *cdio; /**< a way to call general cdio routines. */ } generic_img_private_t; @@ -372,6 +371,21 @@ extern "C" { */ bool cdio_is_device_quiet_generic(const char *source_name); + /*! + Return the number of of the first track. + CDIO_INVALID_TRACK is returned on error. + */ + track_t get_first_track_num_generic(void *p_user_data); + + /*! + Return the number of tracks in the current medium. + */ + track_t get_num_tracks_generic(void *p_user_data); + + /*! + Get disc type associated with cd object. + */ + discmode_t get_discmode_generic (void *p_user_data ); #ifdef __cplusplus } diff --git a/lib/image/bincue.c b/lib/image/bincue.c index fb8be569..dee7653c 100644 --- a/lib/image/bincue.c +++ b/lib/image/bincue.c @@ -1,5 +1,5 @@ /* - $Id: bincue.c,v 1.38 2004/07/26 02:54:37 rocky Exp $ + $Id: bincue.c,v 1.39 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2002, 2003, 2004 Rocky Bernstein Copyright (C) 2001 Herbert Valerio Riedel @@ -26,7 +26,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: bincue.c,v 1.38 2004/07/26 02:54:37 rocky Exp $"; +static const char _rcsid[] = "$Id: bincue.c,v 1.39 2004/07/29 02:16:20 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -81,8 +81,6 @@ typedef struct { exactly 13 bytes */ track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track add 1 for leadout. */ - track_t i_tracks; /* number of tracks in image */ - track_t i_first_track; /* track number of first track */ cdtext_t cdtext; /* CD-TEXT */ discmode_t disc_mode; } _img_private_t; @@ -113,7 +111,7 @@ _init_bincue (_img_private_t *env) get into infinite recursion calling passing right here. */ env->gen.init = true; - env->i_first_track = 1; + env->gen.i_first_track = 1; env->psz_mcn = NULL; env->disc_mode = CDIO_DISC_MODE_NO_INFO; @@ -129,10 +127,11 @@ _init_bincue (_img_private_t *env) if ( !parse_cuefile(env, env->psz_cue_name) ) return false; /* Fake out leadout track and sector count for last track*/ - cdio_lsn_to_msf (lead_lsn, &env->tocent[env->i_tracks].start_msf); - env->tocent[env->i_tracks].start_lba = cdio_lsn_to_lba(lead_lsn); - env->tocent[env->i_tracks - env->i_first_track].sec_count = - cdio_lsn_to_lba(lead_lsn - env->tocent[env->i_tracks - env->i_first_track].start_lba); + cdio_lsn_to_msf (lead_lsn, &env->tocent[env->gen.i_tracks].start_msf); + env->tocent[env->gen.i_tracks].start_lba = cdio_lsn_to_lba(lead_lsn); + env->tocent[env->gen.i_tracks - env->gen.i_first_track].sec_count = + cdio_lsn_to_lba(lead_lsn - + env->tocent[env->gen.i_tracks - env->gen.i_first_track].start_lba); return true; } @@ -157,7 +156,7 @@ _lseek_bincue (void *user_data, off_t offset, int whence) unsigned int i; env->pos.lba = 0; - for (i=0; ii_tracks; i++) { + for (i=0; igen.i_tracks; i++) { track_info_t *this_track=&(env->tocent[i]); env->pos.index = i; if ( (this_track->sec_count*this_track->datasize) >= offset) { @@ -174,7 +173,7 @@ _lseek_bincue (void *user_data, off_t offset, int whence) env->pos.lba += this_track->sec_count; } - if (i==env->i_tracks) { + if (i==env->gen.i_tracks) { cdio_warn ("seeking outside range of disk image"); return -1; } else { @@ -275,7 +274,7 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) char psz_line[MAXLINE]; /* text of current line read in file fp. */ unsigned int i_line=0; /* line number in file of psz_line. */ int i = -1; /* Position in tocent. Same as - cd->i_tracks - 1 */ + cd->gen.i_tracks - 1 */ char *psz_keyword, *psz_field; cdio_log_level_t log_level = (NULL == cd) ? CDIO_LOG_INFO : CDIO_LOG_WARN; cdtext_field_t cdtext_key; @@ -295,8 +294,8 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) } if (cd) { - cd->i_tracks=0; - cd->i_first_track=1; + cd->gen.i_tracks=0; + cd->gen.i_first_track=1; cd->psz_mcn=NULL; } @@ -380,12 +379,12 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) track_info_t *this_track=NULL; if (cd) { - this_track = &(cd->tocent[cd->i_tracks]); - this_track->track_num = cd->i_tracks; + this_track = &(cd->tocent[cd->gen.i_tracks]); + this_track->track_num = cd->gen.i_tracks; this_track->num_indices = 0; b_first_index_for_track = false; - cdtext_init (&(cd->tocent[cd->i_tracks].cdtext)); - cd->i_tracks++; + cdtext_init (&(cd->tocent[cd->gen.i_tracks].cdtext)); + cd->gen.i_tracks++; } i++; @@ -692,7 +691,7 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) cd->tocent[i].indexes[cd->tocent[i].nindex++] = lba; #else track_info_t *this_track= - &(cd->tocent[cd->i_tracks - cd->i_first_track]); + &(cd->tocent[cd->gen.i_tracks - cd->gen.i_first_track]); if (start_index != 0) { if (!b_first_index_for_track) { @@ -702,15 +701,15 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) this_track->start_lba = lba; } - if (cd->i_tracks > 1) { + if (cd->gen.i_tracks > 1) { /* Figure out number of sectors for previous track */ - track_info_t *prev_track=&(cd->tocent[cd->i_tracks-2]); + track_info_t *prev_track=&(cd->tocent[cd->gen.i_tracks-2]); if ( this_track->start_lba < prev_track->start_lba ) { cdio_log (log_level, "track %d at LBA %lu starts before track %d at LBA %lu", - cd->i_tracks, + cd->gen.i_tracks, (unsigned long int) this_track->start_lba, - cd->i_tracks, + cd->gen.i_tracks, (unsigned long int) prev_track->start_lba); prev_track->sec_count = 0; } else if ( this_track->start_lba >= prev_track->start_lba @@ -723,7 +722,7 @@ parse_cuefile (_img_private_t *cd, const char *psz_cue_name) (long unsigned int) this_track->start_lba - prev_track->start_lba, CDIO_PREGAP_SECTORS, - cd->i_tracks); + cd->gen.i_tracks); /* Include pregap portion in sec_count. Maybe the pregap was omitted. */ prev_track->sec_count = this_track->start_lba - @@ -976,10 +975,10 @@ _get_track_format_bincue(void *user_data, track_t i_track) { _img_private_t *env = user_data; - if (i_track > env->i_tracks || i_track == 0) + if (i_track > env->gen.i_tracks || i_track == 0) return TRACK_FORMAT_ERROR; - return env->tocent[i_track-env->i_first_track].track_format; + return env->tocent[i_track-env->gen.i_first_track].track_format; } /*! @@ -996,11 +995,11 @@ _get_track_green_bincue(void *user_data, track_t i_track) _img_private_t *env = user_data; if ( NULL == env || - ( i_track < env->i_first_track - || i_track >= env->i_tracks + env->i_first_track ) ) + ( i_track < env->gen.i_first_track + || i_track >= env->gen.i_tracks + env->gen.i_first_track ) ) return false; - return env->tocent[i_track-env->i_first_track].track_green; + return env->tocent[i_track-env->gen.i_first_track].track_green; } /*! @@ -1015,10 +1014,10 @@ _get_lba_track_bincue(void *user_data, track_t i_track) { _img_private_t *env = user_data; - if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = env->i_tracks+1; + if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = env->gen.i_tracks+1; - if (i_track <= env->i_tracks + env->i_first_track && i_track != 0) { - return env->tocent[i_track-env->i_first_track].start_lba; + if (i_track <= env->gen.i_tracks + env->gen.i_first_track && i_track != 0) { + return env->tocent[i_track-env->gen.i_first_track].start_lba; } else return CDIO_INVALID_LBA; } diff --git a/lib/image/cdrdao.c b/lib/image/cdrdao.c index 27a7483e..41a7c328 100644 --- a/lib/image/cdrdao.c +++ b/lib/image/cdrdao.c @@ -1,5 +1,5 @@ /* - $Id: cdrdao.c,v 1.23 2004/07/26 02:54:37 rocky Exp $ + $Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2004 Rocky Bernstein toc reading routine adapted from cuetools @@ -25,7 +25,7 @@ (*.cue). */ -static const char _rcsid[] = "$Id: cdrdao.c,v 1.23 2004/07/26 02:54:37 rocky Exp $"; +static const char _rcsid[] = "$Id: cdrdao.c,v 1.24 2004/07/29 02:16:20 rocky Exp $"; #include "image.h" #include "cdio_assert.h" @@ -81,8 +81,6 @@ typedef struct { exactly 13 bytes */ track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track add 1 for leadout. */ - track_t i_tracks; /* number of tracks in image */ - track_t i_first_track; /* track number of first track */ cdtext_t cdtext; /* CD-TEXT */ discmode_t disc_mode; } _img_private_t; @@ -108,7 +106,7 @@ _init_cdrdao (_img_private_t *env) get into infinite recursion calling passing right here. */ env->gen.init = true; - env->i_first_track = 1; + env->gen.i_first_track = 1; env->psz_mcn = NULL; env->disc_mode = CDIO_DISC_MODE_NO_INFO; @@ -123,10 +121,10 @@ _init_cdrdao (_img_private_t *env) return false; /* Fake out leadout track and sector count for last track*/ - cdio_lsn_to_msf (lead_lsn, &env->tocent[env->i_tracks].start_msf); - env->tocent[env->i_tracks].start_lba = cdio_lsn_to_lba(lead_lsn); - env->tocent[env->i_tracks-env->i_first_track].sec_count = - cdio_lsn_to_lba(lead_lsn - env->tocent[env->i_tracks-1].start_lba); + cdio_lsn_to_msf (lead_lsn, &env->tocent[env->gen.i_tracks].start_msf); + env->tocent[env->gen.i_tracks].start_lba = cdio_lsn_to_lba(lead_lsn); + env->tocent[env->gen.i_tracks-env->gen.i_first_track].sec_count = + cdio_lsn_to_lba(lead_lsn - env->tocent[env->gen.i_tracks-1].start_lba); return true; } @@ -151,7 +149,7 @@ _lseek_cdrdao (void *user_data, off_t offset, int whence) unsigned int i; env->pos.lba = 0; - for (i=0; ii_tracks; i++) { + for (i=0; igen.i_tracks; i++) { track_info_t *this_track=&(env->tocent[i]); env->pos.index = i; if ( (this_track->sec_count*this_track->datasize) >= offset) { @@ -168,7 +166,7 @@ _lseek_cdrdao (void *user_data, off_t offset, int whence) env->pos.lba += this_track->sec_count; } - if (i==env->i_tracks) { + if (i==env->gen.i_tracks) { cdio_warn ("seeking outside range of disk image"); return -1; } else { @@ -273,7 +271,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name) char psz_line[MAXLINE]; /* text of current line read in file fp. */ unsigned int i_line=0; /* line number in file of psz_line. */ int i = -1; /* Position in tocent. Same as - cd->i_tracks - 1 */ + cd->gen.i_tracks - 1 */ char *psz_keyword, *psz_field; cdio_log_level_t log_level = (NULL == cd) ? CDIO_LOG_INFO : CDIO_LOG_WARN; cdtext_field_t cdtext_key; @@ -806,7 +804,7 @@ parse_tocfile (_img_private_t *cd, const char *psz_cue_name) } } - if (NULL != cd) cd->i_tracks = i+1; + if (NULL != cd) cd->gen.i_tracks = i+1; fclose (fp); return true; @@ -1019,10 +1017,10 @@ _get_track_format_cdrdao(void *user_data, track_t i_track) if (!env->gen.init) _init_cdrdao(env); - if (i_track > env->i_tracks || i_track == 0) + if (i_track > env->gen.i_tracks || i_track == 0) return TRACK_FORMAT_ERROR; - return env->tocent[i_track-env->i_first_track].track_format; + return env->tocent[i_track-env->gen.i_first_track].track_format; } /*! @@ -1040,10 +1038,10 @@ _get_track_green_cdrdao(void *user_data, track_t i_track) if (!env->gen.init) _init_cdrdao(env); - if (i_track > env->i_tracks || i_track == 0) + if (i_track > env->gen.i_tracks || i_track == 0) return false; - return env->tocent[i_track-env->i_first_track].track_green; + return env->tocent[i_track-env->gen.i_first_track].track_green; } /*! @@ -1059,9 +1057,10 @@ _get_lba_track_cdrdao(void *user_data, track_t i_track) _img_private_t *env = user_data; _init_cdrdao (env); - if (i_track == CDIO_CDROM_LEADOUT_TRACK) i_track = env->i_tracks+1; + if (i_track == CDIO_CDROM_LEADOUT_TRACK) + i_track = env->gen.i_tracks+1; - if (i_track <= env->i_tracks+1 && i_track != 0) { + if (i_track <= env->gen.i_tracks+1 && i_track != 0) { return env->tocent[i_track-1].start_lba; } else return CDIO_INVALID_LBA; diff --git a/lib/image/nrg.c b/lib/image/nrg.c index abfe7879..edb89ac8 100644 --- a/lib/image/nrg.c +++ b/lib/image/nrg.c @@ -1,5 +1,5 @@ /* - $Id: nrg.c,v 1.35 2004/07/26 02:54:37 rocky Exp $ + $Id: nrg.c,v 1.36 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2003, 2004 Rocky Bernstein Copyright (C) 2001, 2003 Herbert Valerio Riedel @@ -45,7 +45,7 @@ #include "_cdio_stdio.h" #include "nrg.h" -static const char _rcsid[] = "$Id: nrg.c,v 1.35 2004/07/26 02:54:37 rocky Exp $"; +static const char _rcsid[] = "$Id: nrg.c,v 1.36 2004/07/29 02:16:20 rocky Exp $"; /* reader */ @@ -77,8 +77,6 @@ typedef struct { track_info_t tocent[CDIO_CD_MAX_TRACKS+1]; /* entry info for each track add 1 for leadout. */ - track_t i_tracks; /* number of tracks in image */ - track_t i_first_track; /* track number of first track */ cdtext_t cdtext; /* CD-TEXT */ discmode_t disc_mode; @@ -110,8 +108,8 @@ _register_mapping (_img_private_t *env, lsn_t start_lsn, uint32_t sec_count, track_format_t track_format, bool track_green, int flags) { - const int track_num=env->i_tracks; - track_info_t *this_track=&(env->tocent[env->i_tracks]); + const int track_num=env->gen.i_tracks; + track_info_t *this_track=&(env->tocent[env->gen.i_tracks]); _mapping_t *_map = _cdio_malloc (sizeof (_mapping_t)); _map->start_lsn = start_lsn; @@ -186,10 +184,10 @@ _register_mapping (_img_private_t *env, lsn_t start_lsn, uint32_t sec_count, default: /*this_track->datasize=CDIO_CD_FRAMESIZE_RAW;*/ cdio_warn ("track %d has unknown format %d", - env->i_tracks, this_track->track_format); + env->gen.i_tracks, this_track->track_format); } - env->i_tracks++; + env->gen.i_tracks++; cdio_debug ("start lsn: %lu sector count: %0lu -> %8ld (%08lx)", (long unsigned int) start_lsn, @@ -284,8 +282,8 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) */ env->is_cues = true; /* HACK alert. */ - env->i_tracks = 0; - env->i_first_track = 1; + env->gen.i_tracks = 0; + env->gen.i_first_track = 1; for (idx = 1; idx < entries-1; idx += 2) { lsn_t sec_count; int addrtype = _entries[idx].addr_ctrl / 16; @@ -430,7 +428,7 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) } if (0 == form2) { int i; - for (i=0; ii_tracks; i++) { + for (i=0; igen.i_tracks; i++) { env->tocent[i].track_format= track_format; env->tocent[i].datastart = 0; env->tocent[i].track_green = false; @@ -445,7 +443,7 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) } } else if (2 == form2) { int i; - for (i=0; ii_tracks; i++) { + for (i=0; igen.i_tracks; i++) { env->tocent[i].track_green = true; env->tocent[i].track_format= track_format; env->tocent[i].datasize = CDIO_CD_FRAMESIZE; @@ -729,10 +727,10 @@ parse_nrg (_img_private_t *env, const char *psz_nrg_name) /* Don't use _stat_size_nrg since that will lead to recursion since we haven't fully initialized things yet. */ - cdio_lsn_to_msf (env->size, &env->tocent[env->i_tracks].start_msf); - env->tocent[env->i_tracks].start_lba = cdio_lsn_to_lba(env->size); - env->tocent[env->i_tracks-1].sec_count = - cdio_lsn_to_lba(env->size - env->tocent[env->i_tracks-1].start_lba); + cdio_lsn_to_msf (env->size, &env->tocent[env->gen.i_tracks].start_msf); + env->tocent[env->gen.i_tracks].start_lba = cdio_lsn_to_lba(env->size); + env->tocent[env->gen.i_tracks-1].sec_count = + cdio_lsn_to_lba(env->size - env->tocent[env->gen.i_tracks-1].start_lba); free(footer_buf); return true; @@ -789,7 +787,7 @@ _lseek_nrg (void *user_data, off_t offset, int whence) unsigned int i; - for (i=0; ii_tracks; i++) { + for (i=0; igen.i_tracks; i++) { track_info_t *this_track=&(env->tocent[i]); env->pos.index = i; if ( (this_track->sec_count*this_track->datasize) >= offset) { @@ -806,7 +804,7 @@ _lseek_nrg (void *user_data, off_t offset, int whence) env->pos.lba += this_track->sec_count; } - if (i==env->i_tracks) { + if (i==env->gen.i_tracks) { cdio_warn ("seeking outside range of disk image"); return -1; } else @@ -1098,7 +1096,7 @@ _get_track_format_nrg(void *user_data, track_t track_num) { _img_private_t *env = user_data; - if (track_num > env->i_tracks || track_num == 0) + if (track_num > env->gen.i_tracks || track_num == 0) return TRACK_FORMAT_ERROR; if ( env->dtyp != DTYP_INVALID) { @@ -1128,7 +1126,7 @@ _get_track_green_nrg(void *user_data, track_t track_num) { _img_private_t *env = user_data; - if (track_num > env->i_tracks || track_num == 0) + if (track_num > env->gen.i_tracks || track_num == 0) return false; if ( MTYP_AUDIO_CD == env->mtyp) return false; @@ -1210,15 +1208,15 @@ cdio_open_nrg (const char *psz_source) .stat_size = _stat_size_nrg, }; - _data = _cdio_malloc (sizeof (_img_private_t)); - _data->gen.init = false; + _data = _cdio_malloc (sizeof (_img_private_t)); + _data->gen.init = false; - _data->i_tracks = 0; - _data->mtyp = 0; - _data->dtyp = DTYP_INVALID; - _data->i_first_track = 1; - _data->is_dao = false; - _data->is_cues = false; /* FIXME: remove is_cues. */ + _data->gen.i_tracks = 0; + _data->mtyp = 0; + _data->dtyp = DTYP_INVALID; + _data->gen.i_first_track= 1; + _data->is_dao = false; + _data->is_cues = false; /* FIXME: remove is_cues. */ ret = cdio_new ((void *)_data, &_funcs); diff --git a/lib/image_common.h b/lib/image_common.h index 89fb8bcf..cdecaa79 100644 --- a/lib/image_common.h +++ b/lib/image_common.h @@ -1,5 +1,5 @@ /* - $Id: image_common.h,v 1.14 2004/07/24 14:23:37 rocky Exp $ + $Id: image_common.h,v 1.15 2004/07/29 02:16:20 rocky Exp $ Copyright (C) 2004 Rocky Bernstein @@ -45,7 +45,7 @@ _free_image (void *user_data) if (NULL == env) return; - for (i_track=0; i_track < env->i_tracks; i_track++) { + for (i_track=0; i_track < env->gen.i_tracks; i_track++) { free_if_notnull(env->tocent[i_track].filename); free_if_notnull(env->tocent[i_track].isrc); cdtext_destroy(&(env->tocent[i_track].cdtext)); @@ -106,7 +106,7 @@ _get_cdtext_image (void *user_data, track_t i_track) if ( NULL == env || ( 0 != i_track - && i_track >= env->i_tracks + env->i_first_track ) ) + && i_track >= env->gen.i_tracks + env->gen.i_first_track ) ) return NULL; if (CDIO_CDROM_LEADOUT_TRACK == i_track) @@ -115,7 +115,7 @@ _get_cdtext_image (void *user_data, track_t i_track) if (0 == i_track) return &(env->cdtext); else - return &(env->tocent[i_track-env->i_first_track].cdtext); + return &(env->tocent[i_track-env->gen.i_first_track].cdtext); } @@ -159,10 +159,10 @@ _get_track_msf_image(void *user_data, track_t track_num, msf_t *msf) if (NULL == msf) return false; - if (track_num == CDIO_CDROM_LEADOUT_TRACK) track_num = env->i_tracks+1; + if (track_num == CDIO_CDROM_LEADOUT_TRACK) track_num = env->gen.i_tracks+1; - if (track_num <= env->i_tracks+1 && track_num != 0) { - *msf = env->tocent[track_num-env->i_first_track].start_msf; + if (track_num <= env->gen.i_tracks+1 && track_num != 0) { + *msf = env->tocent[track_num-env->gen.i_first_track].start_msf; return true; } else return false; @@ -177,7 +177,7 @@ _get_first_track_num_image(void *user_data) { _img_private_t *env = user_data; - return env->i_first_track; + return env->gen.i_first_track; } /*! @@ -188,7 +188,7 @@ _get_num_tracks_image(void *user_data) { _img_private_t *env = user_data; - return env->i_tracks; + return env->gen.i_tracks; } /*! diff --git a/test/cdda-mcn.right b/test/cdda-mcn.right index 4ee53d5e..09028d96 100644 --- a/test/cdda-mcn.right +++ b/test/cdda-mcn.right @@ -25,7 +25,6 @@ Writing.... __________________________________ Disc mode is listed as: CD-DA - CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 audio false diff --git a/test/cdda.right b/test/cdda.right index 1bfaec16..f5d1e9bb 100644 --- a/test/cdda.right +++ b/test/cdda.right @@ -25,7 +25,6 @@ Writing.... __________________________________ Disc mode is listed as: CD-DA - CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 audio false diff --git a/test/check_opts0.right b/test/check_opts0.right index 1979e11b..a5da12d9 100644 --- a/test/check_opts0.right +++ b/test/check_opts0.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 Media Catalog Number (MCN): not available __________________________________ CD Analysis Report diff --git a/test/check_opts1.right b/test/check_opts1.right index 1979e11b..a5da12d9 100644 --- a/test/check_opts1.right +++ b/test/check_opts1.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 Media Catalog Number (MCN): not available __________________________________ CD Analysis Report diff --git a/test/check_opts2.right b/test/check_opts2.right index 9cc45654..d3b8ad23 100644 --- a/test/check_opts2.right +++ b/test/check_opts2.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 data false diff --git a/test/check_opts3.right b/test/check_opts3.right index 9cc45654..d3b8ad23 100644 --- a/test/check_opts3.right +++ b/test/check_opts3.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 data false diff --git a/test/check_opts4.right b/test/check_opts4.right index 1bea6710..7a233b98 100644 --- a/test/check_opts4.right +++ b/test/check_opts4.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 data false diff --git a/test/check_opts5.right b/test/check_opts5.right index 1bea6710..7a233b98 100644 --- a/test/check_opts5.right +++ b/test/check_opts5.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 data false diff --git a/test/check_opts6.right b/test/check_opts6.right index 1bea6710..7a233b98 100644 --- a/test/check_opts6.right +++ b/test/check_opts6.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 data false diff --git a/test/check_opts7.right b/test/check_opts7.right index 1bea6710..7a233b98 100644 --- a/test/check_opts7.right +++ b/test/check_opts7.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM form 1 +Disc mode is listed as: CD-DATA Form 1 CD-ROM Track List (1 - 1) #: MSF LSN Type Green? 1: 00:02:00 000000 data false diff --git a/test/monvoisin.right b/test/monvoisin.right index caf379ac..1688ff9a 100644 --- a/test/monvoisin.right +++ b/test/monvoisin.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM XA form2 +Disc mode is listed as: CD DATA Form 2 CD-ROM Track List (1 - 2) #: MSF LSN Type Green? 1: 00:02:00 000000 XA true diff --git a/test/svcdgs.right b/test/svcdgs.right index 3005cec5..8b4c476d 100644 --- a/test/svcdgs.right +++ b/test/svcdgs.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM XA form2 +Disc mode is listed as: CD DATA Form 2 CD-ROM Track List (1 - 2) #: MSF LSN Type Green? 1: 00:02:00 000000 XA true diff --git a/test/videocd.right b/test/videocd.right index 7a38d5e4..61ed99b2 100644 --- a/test/videocd.right +++ b/test/videocd.right @@ -24,7 +24,7 @@ Writing.... Can write DVD-RAM : No __________________________________ -Disc mode is listed as: CD-ROM XA form2 +Disc mode is listed as: CD DATA Form 2 CD-ROM Track List (1 - 5) #: MSF LSN Type Green? 1: 00:02:00 000000 XA true