diff options
Diffstat (limited to 'print/kcdlabel/files/patch-audiocd.cpp')
-rw-r--r-- | print/kcdlabel/files/patch-audiocd.cpp | 97 |
1 files changed, 97 insertions, 0 deletions
diff --git a/print/kcdlabel/files/patch-audiocd.cpp b/print/kcdlabel/files/patch-audiocd.cpp new file mode 100644 index 000000000000..3ee6abd6ae86 --- /dev/null +++ b/print/kcdlabel/files/patch-audiocd.cpp @@ -0,0 +1,97 @@ +--- kcdlabel/audiocd.cpp.orig Mon Dec 29 01:15:28 2003 ++++ kcdlabel/audiocd.cpp Mon Dec 29 02:15:09 2003 +@@ -58,8 +58,13 @@ + + bool AudioCD::readTOC() + { ++#ifdef __FreeBSD__ ++ struct ioc_toc_header tochdr; ++ struct ioc_read_toc_single_entry tocentry; ++#else + struct cdrom_tochdr tochdr; + struct cdrom_tocentry tocentry; ++#endif + int i; + + emit statusText((char *)"Reading Toc..."); +@@ -73,36 +78,61 @@ + return(false); + } + ++#ifdef __FreeBSD__ ++ if (ioctl(cdromfd, CDIOREADTOCHEADER, &tochdr) == -1) ++#else + if (ioctl(cdromfd,CDROMREADTOCHDR,&tochdr) == -1) ++#endif + { + emit statusText((char *)"Read Toc - Read TOC Header error"); + close(cdromfd); + return(false); + } + ++#ifdef __FreeBSD__ ++ tocentry.address_format = CD_MSF_FORMAT; ++ for (i = tochdr.starting_track; i <= tochdr.ending_track; i++) { ++ tocentry.track = i; ++ if (ioctl(cdromfd, CDIOREADTOCENTRY, &tocentry) == -1) ++#else + tocentry.cdte_format = CDROM_MSF; + for (i=tochdr.cdth_trk0;i<=tochdr.cdth_trk1;i++) + { + tocentry.cdte_track = i; + if (ioctl(cdromfd,CDROMREADTOCENTRY,&tocentry) == -1) ++#endif + { + emit statusText((char *)"Read Toc - Read TOC Entry error"); + close(cdromfd); + return(false); + } ++#ifdef __FreeBSD__ ++ TOC[nr_tracks++] = tocentry.entry; ++ TrackOffsets.push_back( (TOC[nr_tracks-1].addr.msf.minute*60+TOC[nr_tracks-1].addr.msf.second)*75+TOC[nr_tracks-1].addr.msf.frame ); ++ } ++ tocentry.track = CDROM_LEADOUT; ++ if (ioctl(cdromfd, CDIOREADTOCENTRY, &tocentry) == -1) ++#else + TOC[nr_tracks++] = tocentry.cdte_addr.msf; + TrackOffsets.push_back( (TOC[nr_tracks-1].minute*60+TOC[nr_tracks-1].second)*75+TOC[nr_tracks-1].frame ); + } + tocentry.cdte_track = CDROM_LEADOUT; + if (ioctl(cdromfd,CDROMREADTOCENTRY,&tocentry) == -1) ++#endif + { + emit statusText((char *)"Read Toc - Read TOC Entry (Lead-out) error"); + close(cdromfd); + return(false); + } ++#ifdef __FreeBSD__ ++ TOC[nr_tracks] = tocentry.entry; ++ // cd length in seconds ++ CDLength = TOC[nr_tracks].addr.msf.minute*60 + TOC[nr_tracks].addr.msf.second; ++#else + TOC[nr_tracks] = tocentry.cdte_addr.msf; + // cd length in seconds + CDLength = TOC[nr_tracks].minute*60 + TOC[nr_tracks].second; ++#endif + // close the cdrom device + close(cdromfd); + TOCAvailable=true; +@@ -120,10 +150,18 @@ + + while ( i < nr_tracks ) + { ++#ifdef __FreeBSD__ ++ n = n + cddb_sum( ( TOC[i].addr.msf.minute * 60 ) + TOC[i].addr.msf.second ); ++#else + n = n + cddb_sum( ( TOC[i].minute * 60 ) + TOC[i].second ); ++#endif + i++; + } ++#ifdef __FreeBSD__ ++ t = (( TOC[nr_tracks].addr.msf.minute * 60 ) + TOC[nr_tracks].addr.msf.second ) - (( TOC[0].addr.msf.minute * 60)+ TOC[0].addr.msf.second ); ++#else + t = (( TOC[nr_tracks].minute * 60 ) + TOC[nr_tracks].second ) - (( TOC[0].minute * 60)+ TOC[0].second ); ++#endif + // get the discid in unsigned long + ulDiscID = (( n % 0xff) << 24 | t << 8 | nr_tracks); + // format the disc id to get a hexdecimal 8 digits string |