Hi, Pete Batard wrote in "check_cue.sh failing with cdda_4_5 image on MinGW": > $ ./src/cd-info.exe --dvd > ... > cd-info.exe: cdio_track_msf for track 4 failed, I give up.
As expected from source study. One should bring some brain from get_track_msf_linux() into the win32 variant. Like this totally untested and not even compiled proposal: static bool _cdio_get_track_msf(void *p_user_data, track_t i_tracks, msf_t *p_msf) { _img_private_t *p_env = p_user_data; if (!p_msf) return false; if (!p_env->gen.toc_init) if (!read_toc_win32 (p_env)) return false; if (i_tracks == CDIO_CDROM_LEADOUT_TRACK) i_track = p_env->gen.i_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 { cdio_lsn_to_msf( p_env->tocent[i_tracks - p_env->gen.i_first_track].start_lsn, p_msf); return true; } } ------------------------------------------------------------------------- As diff: --- lib/driver/MSWindows/win32.c.orig 2018-05-27 09:06:52.403774138 +0200 +++ lib/driver/MSWindows/win32.c 2020-05-20 18:55:12.100941556 +0200 @@ -818,12 +818,15 @@ _cdio_get_track_msf(void *p_user_data, t if (!p_env->gen.toc_init) if (!read_toc_win32 (p_env)) return false; - if (i_tracks == CDIO_CDROM_LEADOUT_TRACK) i_tracks = p_env->gen.i_tracks+1; + if (i_tracks == CDIO_CDROM_LEADOUT_TRACK) + i_track = p_env->gen.i_tracks + p_env->gen.i_first_track; - if (i_tracks > p_env->gen.i_tracks+1 || i_tracks == 0) { + 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 { - cdio_lsn_to_msf(p_env->tocent[i_tracks-1].start_lsn, p_msf); + cdio_lsn_to_msf( + p_env->tocent[i_tracks - p_env->gen.i_first_track].start_lsn, p_msf); return true; } } ------------------------------------------------------------------------- I looked for other suspicious indexed access to .tocent[] and found none. Have a nice day :) Thomas