libcdio-devel
[Top][All Lists]
Advanced

[Date Prev][Date Next][Thread Prev][Thread Next][Date Index][Thread Index]

[Libcdio-devel] Proposal for fix of cd-info on MSWindows driver


From: Thomas Schmitt
Subject: [Libcdio-devel] Proposal for fix of cd-info on MSWindows driver
Date: Wed, 20 May 2020 19:08:08 +0200

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




reply via email to

[Prev in Thread] Current Thread [Next in Thread]