1.1 --- a/src/gdrom/cdi.c Wed Jan 31 10:58:42 2007 +0000
1.2 +++ b/src/gdrom/cdi.c Wed Sep 19 11:30:30 2007 +0000
1.5 - * $Id: cdi.c,v 1.5 2007-01-31 10:58:42 nkeynes Exp $
1.6 + * $Id: cdi.c,v 1.6 2007-02-04 11:30:41 nkeynes Exp $
1.8 * CDI CD-image file support
1.11 struct gdrom_image_class cdi_image_class = { "DiscJuggler", "cdi",
1.12 cdi_image_is_valid, cdi_image_open };
1.14 -static char track_start_marker[20] = { 0,0,1,0,0,0,255,255,255,255,
1.15 +static const char TRACK_START_MARKER[20] = { 0,0,1,0,0,0,255,255,255,255,
1.16 0,0,1,0,0,0,255,255,255,255 };
1.17 +static const char EXT_MARKER[9] = {0,255,255,255,255,255,255,255,255 };
1.19 struct cdi_trailer {
1.20 uint32_t cdi_version;
1.21 @@ -110,6 +111,11 @@
1.23 for( i=0; i< session_count; i++ ) {
1.24 fread( &track_count, sizeof(track_count), 1, f );
1.25 + if( track_count + total_tracks > 99 ) {
1.26 + ERROR( "Invalid number of tracks, bad cdi image\n" );
1.27 + disc->close(disc);
1.30 for( j=0; j<track_count; j++ ) {
1.31 struct cdi_track_data trk;
1.32 uint32_t new_fmt = 0;
1.34 fseek( f, 8, SEEK_CUR ); /* Skip */
1.36 fread( marker, 20, 1, f );
1.37 - if( memcmp( marker, track_start_marker, 20) != 0 ) {
1.38 + if( memcmp( marker, TRACK_START_MARKER, 20) != 0 ) {
1.39 ERROR( "Track start marker not found, error reading cdi image\n" );
1.42 @@ -179,11 +185,11 @@
1.43 trk.pregap_length * image->track[total_tracks].sector_size ;
1.44 posn += trk.total_length * image->track[total_tracks].sector_size;
1.46 - lseek( fd, 12, SEEK_CUR );
1.48 - fseek( f, 90, SEEK_CUR );
1.49 + fread( marker, 1, 9, f );
1.50 + if( memcmp( marker, EXT_MARKER, 9 ) == 0 ) {
1.51 + fseek( f, 91, SEEK_CUR );
1.53 - fseek( f, 12, SEEK_CUR );
1.54 + fseek( f, 3, SEEK_CUR );