Tighten code by putting more generic routines in cdio_generic:
to get first track number and number of tracks to get discmode everybody now has gen.i_tracks and gen.i_first_track. test/* format of output changed yet again.
This commit is contained in:
@@ -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 <rocky@panix.com>
|
||||
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; i<env->i_tracks; i++) {
|
||||
for (i=0; i<env->gen.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;
|
||||
|
||||
Reference in New Issue
Block a user