in cdaudio.cpp, line 413:

int
cd_update(struct disc_info *disc, struct disc_status status)
{
   if(!(disc->disc_present = status.status_present))
     return -1;

   disc->disc_mode = status.status_mode;
   memcpy(&disc->disc_time, &status.status_disc_time, sizeof(struct
disc_timeval));
   memcpy(&disc->disc_track_time, &status.status_track_time, sizeof(struct
disc_timeval));

   if (status.status_current_track != 0)
           disc->disc_current_track = status.status_current_track;
   else {
       disc->disc_current_track = 0;
 ===>  while(disc->disc_current_track < disc->disc_total_tracks &&
             cd_msf_to_frames(disc->disc_time) >=

cd_msf_to_frames(disc->disc_track[disc->disc_current_track].track_pos) )
           disc->disc_current_track++;
   }

   return 0;
}


disc->disc_total_tracks hasn't been initialized yet (0xCDCDCDCD), and it's
being used
to determine how many tracks get added :-(

the fix:

the disc_info struct being passed in is a member variable of
class CDPMO:public PhysicalMediaOutput

in it's Init function,
Error CDPMO::Init(OutputInfo *info)

the class zeroes out that member variable: (line 216)
memset(&dinfo, 0, sizeof(struct disc_info));

but it's already used the member by that time, (line 196)
   if (cd_stat(m_cdDesc, &dinfo, false) < 0) {


===

the fix is to move the memset line of code to somewhere near the beginning
of the
CDPMO::Init() function.

-Jason

_______________________________________________
[EMAIL PROTECTED]
http://www.freeamp.org/mailman/listinfo/freeamp-dev

Reply via email to