comparison cdimage.c @ 2143:67f20f9188b0

Fix support for CUE sheets that refer to multiple files
author Michael Pavone <pavone@retrodev.com>
date Fri, 25 Mar 2022 21:41:33 -0700
parents d9151d0894c7
children 9209858b2f74
comparison
equal deleted inserted replaced
2142:d9151d0894c7 2143:67f20f9188b0
316 } else { 316 } else {
317 line = NULL; 317 line = NULL;
318 } 318 }
319 } while (line); 319 } while (line);
320 if (media->num_tracks > 0 && media->tracks[0].f) { 320 if (media->num_tracks > 0 && media->tracks[0].f) {
321 //end of last track is implicitly defined by file size 321 //end of last track in a file is implictly based on the size
322 if (tracks[media->num_tracks-1].f) { 322 f = tracks[0].f;
323 uint32_t start_lba =tracks[media->num_tracks-1].pregap_lba ? tracks[media->num_tracks-1].pregap_lba : tracks[media->num_tracks-1].start_lba; 323 uint32_t offset = 0;
324 tracks[media->num_tracks-1].end_lba = start_lba + (file_size(tracks[media->num_tracks-1].f) - tracks[media->num_tracks-1].file_offset)/ tracks[media->num_tracks-1].sector_bytes; 324 for (int track = 0; track < media->num_tracks; track++) {
325 if (track == media->num_tracks - 1 && tracks[track].f) {
326 uint32_t start_lba =tracks[track].fake_pregap ? tracks[track].start_lba : tracks[track].pregap_lba;
327 tracks[track].end_lba = start_lba + (file_size(tracks[track].f) - tracks[track].file_offset)/ tracks[track].sector_bytes;
328 } else if (tracks[track].f != f) {
329 uint32_t start_lba =tracks[track-1].fake_pregap ? tracks[track-1].start_lba : tracks[track-1].pregap_lba;
330 tracks[track-1].end_lba = start_lba + (file_size(tracks[track-1].f) - tracks[track-1].file_offset)/ tracks[track-1].sector_bytes;
331 offset = tracks[track-1].end_lba;
332 }
333 if (!tracks[track].fake_pregap) {
334 tracks[track].pregap_lba += offset;
335 }
336 tracks[track].start_lba += offset;
337 tracks[track].end_lba += offset;
325 } 338 }
326 //replace cue sheet with first sector 339 //replace cue sheet with first sector
327 free(media->buffer); 340 free(media->buffer);
328 media->buffer = calloc(2048, 1); 341 media->buffer = calloc(2048, 1);
329 if (tracks[0].type == TRACK_DATA && tracks[0].sector_bytes == 2352) { 342 if (tracks[0].type == TRACK_DATA && tracks[0].sector_bytes == 2352) {